关于如何执行条件C ++的简单查询

时间:2014-10-31 15:51:34

标签: c++

简单的是或否问题:

我有一大堆像

的代码
while (_attributeChars.find_first_of(*it++) != std::string::npos)

我想知道it仍然会增加when _attributeChars.find_first_of(*it) != std::string::nposfalse。也就是说,即使在while循环的最后一次评估中它也会增加?

2 个答案:

答案 0 :(得分:1)

为了让程序知道它是应该继续还是停止循环,它必须评估内部的表达式,这意味着在这种情况下*it++将始终执行。

您应该注意的与您的问题相关的另一件事是++xx++之间的区别。第一个表单返回x的新值,而第二个表单返回旧值。

您可以在此处了解详情:http://www.embedded.com/design/programming-languages-and-tools/4410601/Pre-increment-or-post-increment-in-C-C-

答案 1 :(得分:0)

是的,在评估此条件时,it将始终递增,因为每次都必须评估表达式it++。如果评估具有副作用的表达,则会观察到这些副作用。


有些情况可能不会,但只有在使用短路布尔运算符时才会使用,这是您在此处未使用的情况。例如:

while (something() && it++)

在这种情况下,如果it计算为false,something()将不会递增,因为如果右操作数与结果无关,&&运算符会短路。 ||?:运算符也会短路。

  • a && bb为false时,不评估a
  • a || bb为真时未评估a
  • a ? b : c:如果a为真,则仅评估b,否则仅评估c

如果未评估表达式,则不会执行任何副作用(例如递增/递减或函数调用)。