三元运算的奇怪行为

Odd behavior with ternary operation

如果 flip 为真或 r 为假,则以下代码应该删除字符串的最后一个字符并附加 l(小写 L)。

std::stringstream ss;
ss << code.substr(0, code.size() - 1);
ss << flip ? "l" : "r";
std::string _code = ss.str();

然而,当 flip 为真时,它附加 1,当它为假时,它附加 0。怎么来的?

优先级问题。

ss << flip ? "l" : "r";

表示

(ss << flip) ? "l" : "r";

使用

ss << ( flip ? "l" : "r" );

这与运算符优先级有关。 << 优先于 ?,这意味着 flip 首先附加到 ss

以下应该会导致预期的行为:

 ss << (flip ? "l" : "r");