4

如果我有两个变量abstd::max(a,b)则返回较高的值。

是否有可能让这个函数修改结果更大的变量,即如果x是第三个变量,

max(a,b) = x;

这样,如果大于,则在此调用之后a==x成立,否则?abb==x

4

4 回答 4

19

也许你想要这个:

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;
}
于 2013-03-04T06:59:02.553 回答
1

您可以创建这样的功能:

template< typename T >
T& AssignableMax( T& a, T& b )
{
  return ( a > b ) ? a : b;
}
于 2013-03-04T07:00:04.443 回答
1

如何使用参考:

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

然后你可以使用:

maxref(a, b) = x;
于 2013-03-04T07:00:41.157 回答
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;
}
于 2013-03-04T06:56:50.293 回答