考慮下面的代碼:根據C++標準[expr.cond]類型的「:」如果第一操作數是常量表達式
void f(float x)
{
x * (true ? 1.f : 0.0);
}
類型的declval(bool) ? declval(float) : declval(double)
是double
。
這是否意味着上面的代碼具有等同於:
void f(float x)
{
double(x) * 1.0;
}
還是有允許的情況下,優化的?:
第一個操作數是編譯時間常數表達式語句?
這是來自'混淆的C++比賽'嗎?真的? 1.0f:...'總是評估爲1.0f,但與1.0f相乘有意義嗎? –
@ ott--這是用這樣一種方式來表達問題的好方法,即答案只會關注問題的實質。幾乎任何其他常數都可能得到關於四捨五入的答案,儘管這不是問題的關鍵。 – hvd
一個表達式總是隻能有一個類型,所以'something?的類型? a:b'無論什麼「東西」,都必須始終如一。 – Xeo