2013-03-04 65 views
3

如果我有兩個變量,ab,std::max(a,b)會返回更高的值。C++將兩個變量中較大的一個設置爲一個新值

是它在某種程度上可能有這個功能修改取其變量原來是更大的,也就是說,如果x是第三個變量,

max(a,b) = x; 

,使得該呼叫後a==x成立當a是大於b,否則b==x

+0

你想從函數返回最大值嗎? – 2013-03-04 06:51:11

+3

如果'a'和'b'具有相同的值,會發生什麼?兩者都應該設置爲'x'的值嗎? – jogojapan 2013-03-04 07:23:29

+0

if語句有什麼問題? – 2013-03-04 07:42:14

回答

17

也許你想這樣的:

int &max(int &a, int &b) 
{ 
    return a > b ? a : b; 
} 

然後:

int main() 
{ 
    int x = 10, y = 20; 
    max(x, y) = 100; 
} 

max將參考返回到最大數量,那麼你可以把你max函數賦值的左手,並改變其價值。

基於模板的版本:

template<typename T> 
T &max(T &a, T &b) 
{ 
    return a > b ? a : b; 
} 
+1

這是一個理智的人。無論如何,它比宏觀解決方案好得多。 – Rapptz 2013-03-04 06:59:58

+2

只是可能給它另一個名字,不要與標準混合最大 – nogard 2013-03-04 07:02:28

+0

你能解釋這是如何工作的? nvmd計算出來:P – masfenix 2013-03-04 07:12:55

1

您可以定義一個宏,如果這是可以接受的,你(只是避免給它一個標準的算法,如max的名稱):

#define mmax(x, y) ((x > y) ? (x) : (y)) 

int main() 
{ 
    int x = 0; 
    int y = 1; 
    mmax(x, y) = 2; 
} 

如果你不想使用宏,這裏是一個通用的解決方案:

#include <iostream> 
#include <type_traits> 

template<typename T> 
T& mmax(T& t, T& u) 
{ return (t < u) ? u : t; } 

int main() 
{ 
    int x = 0; 
    int y = 1; 
    mmax(x, y) = 2; 

    std::cout << x << y; 
} 
1

您可以創建這樣的功能:

template< typename T > 
T& AssignableMax(T& a, T& b) 
{ 
    return (a > b) ? a : b; 
} 
1

如何使用引用:

int& maxref(int& a, int& b) 
{ 
    if (a > b) { 
     return a; 
    } 
    return b; 
} 

然後你可以使用:

maxref(a, b) = x; 
相關問題