4

2 つの変数がある場合、aとは、より高い値bstd::max(a,b)返します。

この関数で、より大きいことが判明した変数を変更することはどういうわけか可能ですか。つまりx、3 番目の変数の場合、

max(a,b) = x;

この呼び出しの後、 if was greater than 、 else ?が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 に答える