三元运算奇怪的行为

时间:2015-01-08 15:34:14

标签: c++ ternary-operator stringstream

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

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

但是,当flip为真时,它会附加1,当它为假时,会附加0。怎么样?

2 个答案:

答案 0 :(得分:19)

优先权问题。

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

装置

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

使用

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

答案 1 :(得分:4)

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

以下情况应导致预期的行为:

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