2013-03-04 60 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; 
相关问题