私のc++
コードの行は次のとおりです。
cout<<(i%3==0 ? "Hello\n" : i) ;//where `i` is an integer.
しかし、私はこのエラーを受け取ります:
operands to ?: have different types 'const char*' and 'int
コードを(最小文字数で)変更するにはどうすればよいですか?
ぶさいくな:
i%3==0 ? cout<< "Hello\n" : cout<<i;
良い:
if ( i%3 == 0 )
cout << "Hello\n";
else
cout << i;
の両側の式の結果タイプに:
互換性がある必要があるため、お使いのバージョンは機能しません。
2つの選択肢に互換性のないタイプがある場合、条件演算子を使用することはできません。最も明確なことは使用することですif
:
if (i%3 == 0)
cout << "Hello\n";
else
cout << i;
ただし、この場合、数値を文字列に変換できます。
cout << (i%3 == 0 ? "Hello\n" : std::to_string(i));
一般に、文字を最小化するのではなく、明瞭さを最大化するようにしてください。将来コードを読まなければならないときは、あなた自身に感謝するでしょう。
operator<<
はオーバーロードされ、2つの実行パスは同じオーバーロードを使用しません。<<
したがって、条件の外側を持つことはできません。
あなたが欲しいのは
if (i%3 == 0) cout << "Hello\n"; else cout << i;
これは、条件を逆にすることで少し短くすることができます。
if (i%3) cout << i; else cout << "Hello\n";
そして、三項を使用して保存されたさらにいくつかの文字:
(i%3)?(cout<<i):(cout<<"Hello\n");
std::cout << i % 3 == 0 ? "Hello" : std::to_string(i);
しかし、他のすべての答えが言っているように、それはすぐにスパゲッティコードに変わるので、おそらくこれを行うべきではありません。