首頁  >  文章  >  後端開發  >  一些關於C/C++三元運算子的有趣觀察

一些關於C/C++三元運算子的有趣觀察

PHPz
PHPz轉載
2023-09-15 19:29:021218瀏覽

一些關於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(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中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除