如果我有两个变量,a
和b
,std::max(a,b)
会返回更高的值。C++将两个变量中较大的一个设置为一个新值
是它在某种程度上可能有这个功能修改取其变量原来是更大的,也就是说,如果x
是第三个变量,
max(a,b) = x;
,使得该呼叫后a==x
成立当a
是大于b
,否则b==x
?
如果我有两个变量,a
和b
,std::max(a,b)
会返回更高的值。C++将两个变量中较大的一个设置为一个新值
是它在某种程度上可能有这个功能修改取其变量原来是更大的,也就是说,如果x
是第三个变量,
max(a,b) = x;
,使得该呼叫后a==x
成立当a
是大于b
,否则b==x
?
也许你想这样的:
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;
}
您可以定义一个宏,如果这是可以接受的,你(只是避免给它一个标准的算法,如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;
}
您可以创建这样的功能:
template< typename T >
T& AssignableMax(T& a, T& b)
{
return (a > b) ? a : b;
}
如何使用引用:
int& maxref(int& a, int& b)
{
if (a > b) {
return a;
}
return b;
}
然后你可以使用:
maxref(a, b) = x;
你想从函数返回最大值吗? – 2013-03-04 06:51:11
如果'a'和'b'具有相同的值,会发生什么?两者都应该设置为'x'的值吗? – jogojapan 2013-03-04 07:23:29
if语句有什么问题? – 2013-03-04 07:42:14