tft每日頭條

 > 科技

 > c語言三目運算符例子

c語言三目運算符例子

科技 更新时间:2024-12-19 09:06:10

c語言三目運算符例子(CC編程知識)1

預測以下C 程序的輸出。

#include <iostream>

using namespace std;

int main()

{

int test = 0;

cout << "First character "<< '1'<< endl;

cout << "Second character "<< (test ? 3 : '1') << endl;

return 0;

}

有人希望兩個打印語句的輸出都一樣。但是,輸出将是

First character 1

Second character 49

為什麼第二個語句打印49?閱讀三元表達式。

c語言三目運算符例子(CC編程知識)2

三元運算符(C / C )

三元運算符的格式如下:

exp 1?exp 2:exp 3

表達式exp 1将始終被求值。exp 2exp 3的執行取決于exp 1的結果。如果exp 1的結果非零,則将評估exp 2,否則将評估exp 3

副作用:

exp 1的任何副作用都将在執行exp 2exp 3之前立即進行評估和更新。換句話說,在三元表達式的條件評估之後存在一個序列點。如果exp 2exp 3有副作用,則僅評估其中之一。

返回類型:

這是另一個有趣的事實。三元運算符具有返回類型。返回類型取決于exp 2, 根據常規\重載轉換規則,exp 3可轉換為exp 2。如果它們不可轉換,則編譯器将引發錯誤。請參閱以下示例,

以下程序編譯沒有任何錯誤。三元表達式的返回類型應為float(如exp 2的返回類型),而exp 3(即字面 零-int類型)可以隐式轉換為float。

#include <iostream>

using namespace std;

int main()

{

int test = 0;

float fvalue = 3.111f;

cout << (test ? fvalue : 0) << endl;

return 0;

}

以下程序将無法編譯,因為編譯器無法找到三進制表達式的返回類型,或者在exp 2(char數組)和exp 3(int)之間不存在隐式轉換。

#include <iostream>

using namespace std;

int main()

{

int test = 0;

cout << test ? "A String": 0 << endl;

return 0;

}

以下程序*可能*編譯,但在運行時失敗。三元表達式的返回類型綁定到類型(char *),但是表達式返回int,因此程序失敗。從字面上看,該程序嘗試在運行時在第0個地址打印字符串。

#include <iostream>

using namespace std;

int main()

{

int test = 0;

cout << (test ? "A String": 0) << endl;

return 0;

}

我們可以觀察到将exp 2視為輸出類型,并且exp 3将在運行時轉換為exp 2。如果轉換是隐式的,則編譯器将插入存根進行轉換。如果轉換是顯式的,則編譯器将引發錯誤。如果有任何編譯器未捕獲到此類錯誤,則程序可能會在運行時失敗。

c語言三目運算符例子(CC編程知識)3

最佳實踐:

C 類型系統的強大功能避免了此類錯誤。确保表達式exp 2exp 3返回相同的類型或至少安全可轉換的類型。

希望對你有幫助~

另外如果你想更好地提升你的編程能力,學好C語言C 編程!彎道超車,快人一步!筆者這裡或許可以幫到你~

編程學習書籍分享:

c語言三目運算符例子(CC編程知識)4

編程學習視頻分享:

c語言三目運算符例子(CC編程知識)5

分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!

C語言C 編程學習交流圈子,點擊下方【了解更多】獲取更多學習資料幫助你學習成長~

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved