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