ある場合は、次のコードを検討:タイプ「?」最初のオペランドは、定数式
void f(float x)
{
x * (true ? 1.f : 0.0);
}
はdeclval(bool) ? declval(float) : declval(double)
のタイプは、C++標準の[expr.cond]に従ってdouble
あります。
void f(float x)
{
double(x) * 1.0;
}
またはケースで最適化が?:
の最初のオペランドがコンパイル時定数式であることができ文があります:
「難読化されたC++コンテスト」からですか? 「本当ですか? 1.0f:... 'は常に1.0fと評価されますが、1.0fで乗算するのは意味がありますか? –
@ ott--これは、質問が実際に何についてであるかにだけ答えが集中するような方法で質問を表現する良い方法です。たとえそれが問題のポイントではないとしても、他のどんな定数でも丸めに焦点を当てた答えが得られるはずです。 – hvd
式は常に1つの型しか持てないので、 'something? a:bは、「何か」が何であれ、常に同じでなければならず、同じでなければならない。 – Xeo