当前位置:  开发笔记 > 编程语言 > 正文

提升lambda迷惑

如何解决《提升lambda迷惑》经验,为你挑选了1个好方法。

为什么回调只调用一次?

bool callback()
{
    static bool res = false;
    res = !res;
    return res;
}

int main(int argc, char* argv[])
{
    vector x(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.



1> Daniel LeChe..:

||表达的短路的第一时间之后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.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有