简单的是或否问题:
我有一大堆像
的代码while (_attributeChars.find_first_of(*it++) != std::string::npos)
我想知道it
仍然会增加when _attributeChars.find_first_of(*it) != std::string::npos
是false
。也就是说,即使在while
循环的最后一次评估中它也会增加?
答案 0 :(得分:1)
为了让程序知道它是应该继续还是停止循环,它必须评估内部的表达式,这意味着在这种情况下*it++
将始终执行。
您应该注意的与您的问题相关的另一件事是++x
和x++
之间的区别。第一个表单返回x的新值,而第二个表单返回旧值。
答案 1 :(得分:0)
是的,在评估此条件时,it
将始终递增,因为每次都必须评估表达式it++
。如果评估具有副作用的表达,则会观察到这些副作用。
有些情况可能不会,但只有在使用短路布尔运算符时才会使用,这是您在此处未使用的情况。例如:
while (something() && it++)
在这种情况下,如果it
计算为false,something()
将不会递增,因为如果右操作数与结果无关,&&
运算符会短路。 ||
和?:
运算符也会短路。
a && b
:b
为false时,不评估a
。a || b
:b
为真时未评估a
。a ? b : c
:如果a
为真,则仅评估b
,否则仅评估c
。如果未评估表达式,则不会执行任何副作用(例如递增/递减或函数调用)。