このコードはJS開発者にとって未知のものではありません
function get_counter()
{
return (
function() {
var c = 0;
return function() { return ++c; };
})();
}
基本的に、さまざまな列挙子を作成するを作成します。それで、新しいラムダセマンティクスを使用してC ++ 11で同じことができるかどうか疑問に思いましたか?残念ながらコンパイルされないこのC++を書くことになりました!
int main()
{
int c;
auto a = [](){
int c = 0;
return [&](){
cout << c++;
};
};
return 0;
}
だから私はそれをコンパイルするための回避策があるかどうか、そしてコンパイラがこのコードを正しく実行する方法があるかどうか疑問に思っていましたか?つまり、個別の列挙子を作成する必要がありますが、ガベージ(未使用のc変数)も収集する必要があります。
ちなみに、私はVS2012コンパイラを使用していますが、次のエラーが発生します。
Error 2 error C2440: 'return' : cannot convert from 'main::<lambda_10d109c73135f5c106ecbfa8ff6f4b6b>::()::<lambda_019decbc8d6cd29488ffec96883efe2a>' to 'void (__cdecl *)(void)' c:\users\ali\documents\visual studio 2012\projects\test\test\main.cpp 25 1 Test