c++有3種運算子:算數運算子、關係運算子和邏輯運算子。
運算子在計算機中的執行順序
運算子用來構成表示式並指示計算機執行計算,其基本特性就是優先順序和結合律。在沒有使用小括號確定乙個復合表示式中個運算子的計算順序的情況下,編譯器將使用它們的優先順序和結合律老確定計算順序,優先順序越高的運算子越先運算。
如果**行中的運算子比較多,用括號確定表示式中每乙個子表示式的計算順序,避免使用預設優先順序。
c++中唯一的三元運算子
條件運算www.cppcns.com符「?:「,其語法為:
// 條件表示式 ? 表示式1 : 表達ievxqtfrid式2;
bool b_show = true;
int state = b_show ? 0 : 1;
// state = 0;
語義:如果「條件表示式」為true,則整個表示式的值就是表示式1,忽略表示式2;如果「條件表示式」為false,則整個表示式的值就是表示式2,忽略表示式1。等價於以下if/else語句
result result;
if ievxqtfrid(條件表示式)
else
同學群裡面討論的,感覺很有意思,就記錄下來了。
問題如下:
**一cout << (1 > 2 ? 1 : "1") << endl;
**二cout << (1 > 2 ? 0 : "1") << endl;
**三cout << (1 > 2 ? "hello" : "hi") << endl;
執行結果是**一出錯 error c2446: 「:」: 沒有從「const char *」到「int」的轉換,**二和三沒有任何問題。
這裡再回顧下三元運算子的用法。
val = exp1 ? exp2 : exp3
exp1為真則val = exp2否則val = exp3。
因此不論什麼時候都會涉及到乙個val後等號的型別轉換。
答案其實很簡單,0可以視作null,因此預設**二中cout輸出型別是char *,**三中亦是如此,而**一中則會出現兩種不同的型別,無法順利進行型別轉換。
此外如果是**二的條件為假的情況,www.cppcns.com則連endl也不會輸出,這個就不知道怎麼回事了。
**四:
cout << (1 > 2 ? 0 : '1') << endl;
會正確的轉換成int型別。
結論:編譯器在編譯的時候就根據exp2和exp3確定了val的接收型別,再傳給cout。
這裡乙個不規範的0的寫法導致了**二的正常執行。
C 三元運算子
格式 正如名字表示 條件表示式 表示式1 表示式2。說明 問號前面的位置是判斷的條件,判斷結果為bool型,為true時呼叫表示式1,為false時呼叫表示式2。三元運算子語法 條件表示式 表示式1 表示式2 int a 5 string str a 10?a大於10 a小於10 輸出為 a小於10...
C 條件運算子 三元運算子
它首先判斷乙個條件,如果條件為真,就返回乙個值,如果條件為假,則返回另乙個值。condition true value false value condition 是布林表示式,ture value 是 condition 為真時返回的值,false value 是 condition為假是返回的值...
三元運算子
根據條件執行兩個語句中的其中乙個。test?語句1 語句2引數 test 任何boolean 表示式。語句1當 test 是true時執行的語句。可以是復合語句。語句2當 test 是false時執行的語句。可以是復合語句。說明?運算子是if.else語句的快捷方式。它通常被用作較大表示式的一部分,...