如果我有两个变量a
和b
,std::max(a,b)
会返回更高的值。
是否有可能让这个函数修改哪个变量更大,即如果x
是第三个变量,
max(a,b) = x;
这样,如果a==x
大于a
,那么此次通话b
成立,否则为b==x
?
答案 0 :(得分: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 :(得分:1)
您可以创建此类功能:
template< typename T >
T& AssignableMax( T& a, T& b )
{
return ( a > b ) ? a : b;
}
答案 2 :(得分:1)
如何使用引用:
int& maxref(int& a, int& b)
{
if (a > b) {
return a;
}
return b;
}
然后你可以使用:
maxref(a, b) = x;
答案 3 :(得分:0)
您可以定义一个宏,如果您可以接受(只是避免给它一个标准算法的名称,如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;
}