試してみると、条件演算子の前後に角カッコを入れる必要があることがわかりました。ここで小さな例:条件演算子がcout文で使用されている
#include <iostream>
int main() {
int a = 5;
float b = (a!=0) ? 42.0f : -42.0f;
// works fine
std::cout << b << std::endl;
// works also fine
std::cout << ((a != 0) ? 42.0f : -42.0f) << std::endl;
// does not work fine
std::cout << (a != 0) ? 42.0f : -42.0f;
return 0;
}
出力は次のとおりです。
42
42
1
なぜ、このブラケットが必要なのか?条件付き演算子の結果の型はどちらの場合にも知られていますか?
ただ、 'cout <<'は 'cout'を返します。有効な状態に関するものではありません。 failbit/badbitが設定されますが、 '(std :: cout <<(a!= 0))'は常に 'std :: cout'への参照を返します。 '-42.0f'は返されるべきではありません。そのリファレンスは常に真でなければなりません。 –
ありがとう、先例についても考えなかった – m47h
@SamDeHaan:はい。申し訳ありませんが、私はおそらく私の説明では少しばかりではなかったでしょう。式 "cout << x"はcoutを返します。しかし、 "cout?a:b"という式を評価するためには、まず、coutを?:演算子の有効なオペランドである値にキャストする必要があります。この場合、作業を行うのは(operator void *)です。エラーフラグが設定されている場合、その演算子はNULLを返します。参照: –