三元运算的奇怪行为
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");
如果 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");