如果我有兩個變量,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