三元运算符中的Cout String和int

时间:2013-02-01 15:41:38

标签: c++ string int

我的c++代码中的一行显示为:

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

但是我收到了这个错误:

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

如何修改代码(字符最少)?

4 个答案:

答案 0 :(得分:6)

丑:

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

尼斯:

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

您的版本不起作用,因为:两侧的表达式的结果类型需要兼容。

答案 1 :(得分:2)

如果两个选项具有不兼容的类型,则无法使用条件运算符。最明显的是使用if

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

虽然在这种情况下您可以将数字转换为字符串:

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

一般来说,你应该尽量提高清晰度,而不是最小化字符;当你将来必须阅读代码时,你会感谢你自己。

答案 2 :(得分: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");

答案 3 :(得分:1)

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

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