簡體   English   中英

具有混合數據類型的條件運算符?

[英]Conditional operator with mixed data types?

條件運算符不能使用混合數據類型,因此:

bool cond = true;
cout << (cond?1:2) << endl;
cout << (cond?"msg1":"msg2") << endl;
cout << (cond?1:"msg") << endl;

在最后一行,我收到此錯誤消息:

錯誤:不兼容的操作數類型('int'和'const char *')

有沒有辦法在這樣的語句中混合使用單行代碼的不同類型? 我需要將它放在預處理器宏中。

編譯:clang 3.5

這個問題是? :運算符導致賦值操作,因此它只能將值賦值給單個類型,並且在編譯時不可能確定應該使用哪種類型,因為代碼分支就好像使用了if語句一樣。 想象一個方法,在一個case中返回一個字符串,在另一個case中返回一個int,這是不可能的。 你可以做的就是你可以在莫斯科建議的@Vlad中輸出類型。

對於最后一個語句,您可以確定常見類型,如std::string

例如

std::cout << ( cond ? std::to_string( 1 ) : "msg" ) << std::endl;

對於不同的數據類型,<<運算符被重載,並且在編譯代碼時,編譯器確定要調用的重載函數。 這就是為什么你不能有一個返回不同可能數據類型的函數的原因:編譯器不能選擇正確的重載方式。

因此,請將(cond?result1:result2)視為一個只需要一個返回類型的函數,就像任何其他函數一樣。

如果您更清楚地說明您正在嘗試做什么,可能更容易幫助您!

干杯

聲明(cond?1:"msg")在編譯期間它會導致失敗。

a = (cond?1:"msg")編譯器將這個表達式翻譯成類似於此

if cond then 
    a = 1
  else
   a ="msg"

我們可以看到分配給a的值的類型從if更改為else。 但如果您使用支持類型更改的動態語言,那么它將是有效的。

所以你應該使用cout<<(cond?std::to_string( 1 ):"msg");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM