條件運算子: ?:
語法
expression ? expression : expression
備註
條件運算子 ( ? : ) 是三元運算子(需要三個運算元)。 條件運算子運作方式如下:
第一個運算元會隱含轉換成
bool
。 接著會對它進行評估,並且完成所有副作用,再繼續執行。如果第一個運算元評估為
true
(1),則會評估第二個運算元。如果第一個運算元評估為
false
(0),則會評估第三個運算元。
條件運算子的結果會是所評估運算元 (也就是第二個或第三個運算元) 的結果。 在條件運算式中,只會評估後兩個運算元的其中一個。
條件運算式具有由右至左順序關聯性。 第一個運算元必須為整數類資料類型或指標類型。 下列規則適用於第二個和第三個運算元:
如果這兩個運算元屬於相同類型,則結果為該類型。
如果這兩個運算元都是算術或列舉型別,則會執行一般算術轉換(標準轉換 中所述 ),將它們轉換成一般類型。
如果這兩個運算元都是指標類型,或者其中一個是指標類型,另一個是判斷值為 0 的常數運算式,則會進行指標轉換,將它們轉換成一般類型。
如果這兩個運算元屬於參考類型,則會進行參考轉換,將它們轉換成一般類型。
如果這兩個運算元屬於 void 類型,則一般類型會是 void 類型。
如果這兩個運算元屬於相同的使用者定義類型,則一般類型會是該類型。
如果運算元的類型不同,且至少其中一個運算元具有使用者定義類型,則會使用語言規則來判斷一般類型。 (請參閱下列警告)。
未包含在上述清單中的任何第二個和第三個運算元組合都不合法。 結果的類型是一般類型,而如果第二個和第三個運算元屬於相同類型且都是左值,則結果也會是左值。
警告
如果第二個運算元的類型與第三個運算元的類型不同,則會叫用依照 C++ 標準指定的複雜類型轉換規則。 這些轉換可能會導致非預期的行為,包括建構和解構暫存物件。 因此,強烈建議您 (1) 避免使用使用者定義類型做為搭配條件運算子的運算元,或者 (2) 如果您使用使用者定義類型,則明確地將每個運算元轉換成一般類型。
範例
// expre_Expressions_with_the_Conditional_Operator.cpp
// compile with: /EHsc
// Demonstrate conditional operator
#include <iostream>
using namespace std;
int main() {
int i = 1, j = 2;
cout << ( i > j ? i : j ) << " is greater." << endl;
}
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應