我們知道三元運算子是取代 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(char陣列)和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。如果轉換被視為隱式的話,編譯器將 插入轉換的存根。如果將轉換視為明確操作,編譯器將拋出錯誤。如果任何編譯器能夠忽略此類錯誤,則程式可能在執行時或執行時失敗。
以上是一些關於C/C++三元運算子的有趣觀察的詳細內容。更多資訊請關注PHP中文網其他相關文章!