關於 C/C++ 三元運算子的一些有趣觀察
我們知道三元運算子是用來代替 if..else 語句的。它由 ?: 表示。'?' 符號相當於 if 部分,':' 符號相當於 else 部分。以下 3 個程式解釋了三元運算子的一些有趣觀察。
以下程式能夠編譯透過,沒有任何錯誤。三元表示式的返回值型別期望為 float(與 exp2 相同),而 exp3(即字面量零 - int 型別)能夠隱式轉換為 float。
#include <iostream>
using namespace std;
int main(){
int test1 = 0;
float fvalue = 3.111f;
cout<< (test1 ? fvalue : 0) << endl;
return 0;
}以下程式將無法編譯,原因是編譯器無法找到三元表示式的返回值型別,或者 exp2(字元陣列)和 exp3(int)之間不存在隱式轉換。
#include <iostream>
using namespace std;
int main(){
int test1 = 0;
cout<< test1 ? "A String" : 0 << endl;
return 0;
}以下程式可能會編譯透過,但也可能在執行時失敗。三元表示式的返回值型別限制為(char *)型別,但表示式返回 int,因此程式失敗。直白地說,程式在執行時嘗試列印第 0 個地址處的字串。
#include <iostream>
using namespace std;
int main(){
int test1 = 0;
cout << (test1 ? "A String" : 0) << endl;
return 0;
}我們可以觀察到 exp2 被視為輸出型別,而 exp3 將能夠在執行時轉換為 exp2。如果轉換被視為隱式轉換,則編譯器會插入轉換存根。如果轉換被視為顯式轉換,則編譯器會丟擲錯誤。如果任何編譯器都無法捕獲此類錯誤,則程式可能會在執行時失敗。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP