我的c++
代码中的一行显示为:
cout<<(i%3==0 ? "Hello\n" : i) ;//where `i` is an integer.
但是我收到了这个错误:
operands to ?: have different types 'const char*' and 'int
如何修改代码(字符最少)?
答案 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);
但是,正如所有其他答案所说,你可能不应该这样做,因为它很快变成了意大利面条代码。