我的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;
您的版本不起作用,因为两边的表达式的结果类型:
需要兼容。
如果两个备选方案的类型不兼容,则不能使用条件运算符。最清楚的是使用if
:
if (i%3 == 0)
cout << "Hello\n";
else
cout << i;
尽管在这种情况下您可以将数字转换为字符串:
cout << (i%3 == 0 ? "Hello\n" : std::to_string(i));
一般来说,你应该尽量提高清晰度而不是尽量减少字符;当您将来必须阅读代码时,您会感谢自己。
std::cout << i % 3 == 0 ? "Hello" : std::to_string(i);
但是,正如所有其他答案所说,您可能不应该这样做,因为它很快就会变成意大利面条代码。
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");