2 つの変数がある場合、a
とは、より高い値b
をstd::max(a,b)
返します。
この関数で、より大きいことが判明した変数を変更することはどういうわけか可能ですか。つまりx
、3 番目の変数の場合、
max(a,b) = x;
この呼び出しの後、 if was greater than 、 else ?が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;
}
そのような関数を作成できます:
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;
許容できる場合は、マクロを定義できます(たとえば、などの標準アルゴリズムの名前を付けることは避けてください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;
}