簡體   English   中英

C ++條件運算符在全局函數中使用時無法正常工作

[英]C++ Conditional Operators Do Not Work Properly When Used in Global Functions

我試圖使用條件運算符來執行簡單的max / min函數,該函數將兩個整數之間的值進行比較,但是我發現,當我在函數中全局使用這些條件運算符時,它們不能按預期方式運行,但它們可以正常工作當我將完全相同的代碼放在本地時。

在下面的代碼中,我嘗試了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;
}
int max(int a, int b){(a) > (b) ? (a) : (b);}

您忘記了在那里的“返回”聲明。 必須指出從函數返回的值。

您的編譯器應該已經對此發出警告。 特別是在學習C ++時,打開您可以想到的所有編譯器診斷很有用。 每個值得付出的編譯器都會抱怨這樣的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM