首頁 > 後端開發 > C++ > 主體

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

PHPz
發布: 2023-09-15 19:29:02
轉載
1156 人瀏覽過

一些關於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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!