lambda表达式(MSVC++ vs g ++)

Pra*_*rav 6 c++ lambda visual-c++ visual-c++-2010 c++11

我有以下代码

#include <algorithm>
#include <iostream>
#include <vector>
#include <functional>


int main()
{
  typedef std::vector<int> Vector; 
  int sum=0;
  Vector v;
  for(int i=1;i<=10;++i)
     v.push_back(i);

  std::tr1::function<double()>  l=[&]()->double{

    std::for_each(v.begin(),v.end(),[&](int n){sum += n; //Error Here in MSVC++});
    return sum;
     };

  std::cout<<l();
  std::cin.get();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码产生错误,MSVC++ 10而它编译得很好g++ 4.5.产生的错误是1 IntelliSense: invalid reference to an outer-scope local variable in a lambda body c:\users\super user\documents\visual studio 2010\projects\lambda\lambda.cpp 19 46 lambda

那么,有没有其他方法可以访问外部作用域变量sum而无需在本地lambda表达式(内部std::for_each)中显式创建新变量?

g++ 4.5代码编译好.标准(n3000草案)是否说了什么?(我目前没有C++ - 0x(1x?)标准的副本)

Jam*_*lis 15

你真的尝试过编译问题中的代码吗?Visual C++ 2010接受代码(显然删除了注释),并成功编译代码而没有错误.

您看到的"错误"不是编译错误,而是IntelliSense错误.IntelliSense错误检查会导致很多误报(我在过去几个月中报告过Microsoft Connect上的一些错误); 在这种情况下,IntelliSense错误地说这是一个错误,当它不是.

您有两个选择:可以忽略IntelliSense误报,也可以禁用IntelliSense错误检查(右键单击错误列表窗口并取消选中"显示IntelliSense错误").

无论哪种方式,这些IntelliSense错误都不会阻止编译成功.