2016-10-23 4 views
1

私はこの機能を非常に新しくしています。私はラムダ式をC++で読んで、単純なプログラムで実装しようとしました。なぜC++のラムダ式が動作しないのですか

int main() 
{ 
    std::string name; 
    int a = 5; 
    std::cout << "What is your name? "; 
    getline (std::cin, name); 
    for([&](){a = 7;};a > 0; a--) 
    { 
    std::cout << "Hello, " << name << "!\n"; 
    } 
} 

が、その私はそれが... 私の前提になると思ったように動作していない:[&](){a = 7;}これは5から7への変数の値を変更しますが、そのない... は、コード内で何か問題があるの?あるいは私の前提は間違っていますか?

+0

[lambda '1' all time]の複製が可能です。(http://stackoverflow.com/questions/28273891/lambda-returns-1-all-time) –

+3

ラムダを作成して投げ捨てました。実行するには、()演算子を呼び出す必要があります。 –

+0

@RaymondChenはそれを得た。それは問題を解決した..ありがとう.. :) –

答えて

1

を呼び出すという前提が正しいとします。

[&]:暗黙のうちに参照として取り込みます。すべてのローカル名を使用できます。すべてのローカル変数は、参照によってアクセスされる です。

ローカル変数にアクセスできますが、ラムダ自体は呼び出されません。これはあなたのコードで起こっです:

->は暗黙の型変換

である代わりに、それを呼び出すために(lambdaExpression)()またはlambdaExpression()を行う

Lambda Expression without capture -> functionPtr -> bool (true for non-null functionPtr)

関連する問題