0

私のc++コードの行は次のとおりです。

cout<<(i%3==0 ? "Hello\n" : i) ;//where `i` is an integer.

しかし、私はこのエラーを受け取ります:

operands to ?: have different types 'const char*' and 'int

コードを(最小文字数で)変更するにはどうすればよいですか?

4

4 に答える 4

7

ぶさいくな:

i%3==0 ? cout<< "Hello\n" : cout<<i;

良い:

if ( i%3 == 0 )
   cout << "Hello\n";
else
   cout << i;

の両側の式の結果タイプに:互換性がある必要があるため、お使いのバージョンは機能しません。

于 2013-02-01T15:43:22.373 に答える
2

2つの選択肢に互換性のないタイプがある場合、条件演算子を使用することはできません。最も明確なことは使用することですif

if (i%3 == 0)
    cout << "Hello\n";
else
    cout << i;

ただし、この場合、数値を文字列に変換できます。

cout << (i%3 == 0 ? "Hello\n" : std::to_string(i));

一般に、文字を最小化するのではなく、明瞭さを最大化するようにしてください。将来コードを読まなければならないときは、あなた自身に感謝するでしょう。

于 2013-02-01T15:44:39.523 に答える
1

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");
于 2013-02-01T15:45:09.833 に答える
1
std::cout << i % 3 == 0 ? "Hello" : std::to_string(i);

しかし、他のすべての答えが言っているように、それはすぐにスパゲッティコードに変わるので、おそらくこれを行うべきではありません。

于 2013-02-01T16:10:29.957 に答える