为什么我不能在IF语句中比较三个不同的值? CPP

时间:2017-01-30 18:30:30

标签: c++

说我有下一个代码示例:

std::string MyString("Michael");
std::cout << (str.find_first_of('=') == str.find_last_of('=') == str.npos);

前面的代码应该给我1,因为前两个从str成员函数返回的值将是:

  

4294967295

这也是npos值。 但相反,&#39; 0&#39; 0正在屏幕上打印。

另一个奇怪的事情是下一个代码:

std::string MyString("Michael");
std::cout << (str.find_first_of('=') == str.find_last_of('=')) << std::endl; 
std::cout << (str.find_last_of('=') == str.npos) << std::endl;

打印&#39; 1&#39;对于这两个产出。

有人可以解释一下,为什么我不能像上面那样比较3个值?

3 个答案:

答案 0 :(得分:5)

你不能像这样连接布尔比较(你可以,但它没有做你想象的那样)。它需要是:

std::cout << (str.find_first_of('=') == str.npos && str.find_last_of('=') == str.npos);

即。两个比较由逻辑AND加入。

答案 1 :(得分:3)

(str.find_first_of('=') == str.find_last_of('=') == str.npos)

这基本上是:

(true == str.npos);

这是false,因此,为您提供0

答案 2 :(得分:2)

更改

std::cout << (str.find_first_of('=') == str.find_last_of('=') == str.npos); 
// compares the result of a==b with c

std::cout << (str.find_first_of('=') == str.find_last_of('=') &&  str.find_last_of('=') == str.npos); 
// ensures a == b && b == c

此外,您可能自己也非常了解答案(只是尝试将事情联系起来) -

std::cout << (str.find_first_of('=') == str.find_last_of('='))

为您提供1,当然您知道str.npos = 4294967295

简化事情 -

std::cout << (str.find_first_of('=') == str.find_last_of('=') == str.npos)

更改为

std::cout << (1 == 4294967295) 

,结果为0

注意 - 专门以first_oflast_of比较为例,因为==跟随从左到右结合性。虽然在你的情况下结果是相同的,无论如何。