我有以下代碼lambda表達式(MSVC++ VS克++)
#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();
}
而它編譯罰款與g++ 4.5
以上代碼生成上MSVC++ 10
錯誤。 產生的誤差是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
代碼編譯得很好。 (我現在沒有C++ - 0x(1x?)標準的副本)
VS10 doees有一些已知的與lambda捕獲範圍有關的bug,在這種情況下最有可能GCC是正確的。 – jalf 2010-07-09 09:12:47
只需下載最近的標準草案 - 在Google上尋找「C++標準」,即可爲您提供鏈接。這是一個有趣的學習經驗,看看它:) – 2010-07-09 10:26:47
請注意,最新的草案是FCD,N3092,你可以[從WG21網站下載](http://www.open-std.org/jtc1/ sc22/wg21/docs/papers/2010/n3092.pdf)(**警告:10.5MB PDF **)。 – 2010-07-11 04:56:48