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

如果两个备选方案的类型不兼容,则不能使用条件运算符。最清楚的是使用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
std::cout << i % 3 == 0 ? "Hello" : std::to_string(i);

但是,正如所有其他答案所说,您可能不应该这样做,因为它很快就会变成意大利面条代码。

于 2013-02-01T16:10:29.957 回答
1

operator<<被重载,并且两个执行路径不使用相同的重载。因此,您不能<<在条件之外。

你想要的是

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 回答