为什么回调只调用一次?
bool callback() { static bool res = false; res = !res; return res; } int main(int argc, char* argv[]) { vectorx(10); bool result=false; for_each(x.begin(),x.end(),var(result)=var(result)||bind(callback)); return 0; }
Daniel LeChe.. 8
的||
表达的短路的第一时间之后bind
返回true
.
你第一次评估
result = result || bind(...) // result is false at this point
bind
被称为,因为这是确定价值的唯一方法false || bind(...)
.因为bind(...)
返回true
,result
设置为true
.
你说的每隔一次
result = result || bind(...) // result is true at this point
... 的bind(...)
表达不评估,因为它并不重要,它返回 ; 表达式true || anything
总是true
,||
表达式短路.
确保bind
始终调用的一种方法是将其移动到左侧||
,或者将其更改||
为a &&
,具体取决于您要完成的操作result
.
的||
表达的短路的第一时间之后bind
返回true
.
你第一次评估
result = result || bind(...) // result is false at this point
bind
被称为,因为这是确定价值的唯一方法false || bind(...)
.因为bind(...)
返回true
,result
设置为true
.
你说的每隔一次
result = result || bind(...) // result is true at this point
... 的bind(...)
表达不评估,因为它并不重要,它返回 ; 表达式true || anything
总是true
,||
表达式短路.
确保bind
始终调用的一种方法是将其移动到左侧||
,或者将其更改||
为a &&
,具体取决于您要完成的操作result
.