我想用條件運算符來做比較兩個整數值之間簡單的最大/最小值函數,但是我發現當我在全局中使用這些條件運算符時在函數中,它們並不像預期的那樣工作,但是當我在本地使用完全相同的代碼時,它們確實很好。C++條件運算符在全局函數中不能正常工作
在下面的代碼中,我已經嘗試了4種方法(如下面的註釋所示),方法2,3以及4都運行良好,但方法1(它使用與方法4,但全球)只是不會產生正確的結果。
//For method 1 to method 4, pick one and comment out the others.
#include <iostream>
//Method 1: Does not work, yields "1,1".
int max(int a, int b){(a) > (b) ? (a) : (b);}
int min(int a, int b){(a) < (b) ? (a) : (b);}
//Method 2: Works well, yields "2,1".
#define max(x, y) ((x) > (y) ? (x) : (y))
#define min(x, y) ((x) < (y) ? (x) : (y))
//Method 3: Works well, yields "2,1".
int max(int a, int b){if(a > b) return a; else return b;}
int min(int a, int b){if(a < b) return a; else return b;}
int main(void)
{
int a = 1, b = 2;
//Method 4: Works well, yields "2,1".
int large = ((a) > (b) ? (a) : (b));
int small = ((a) < (b) ? (a) : (b));
int large = max(a,b); //Comment out when using Method 4.
int small = min(a,b); //Comment out when using Method 4.
std::cout << large << "," << small << std::endl;
return 0;
}
太多的括號在'max'和'min'的身體中。它們只在宏中需要。 –
@PeteBecker我已經修復了他們的代碼。非常感謝! –
請不要編輯問題的解決方案 - 這會讓人們第一次看到問題時感到困惑。相反,將問題留在原來的位置,然後接受其中一個已發佈的答案。 –