2017-08-21 1 views
-1

私は2003年にC++を使い続け、再訪しようとしていて、新しいものを学びます。 Javaでしばらくの間働いており、ラムダ構文を学んでいます。この例題をC++で見て、誰かが説明できるかどうか疑問に思った。C++のラムダと演算子の構文

#include "stdafx.h" 
#include <iostream> 
#include <string> 

using namespace std; 

int i = 42; 
char code = 'c'; 

[=, &i]() mutable 
{ 
    i++; 
    code = 'd'; 
    std::cout << "i: " << i << "code " << code << std::endl; 
}(); 


void wait() 
{ 
    cin.clear(); 
    cin.ignore(); 
    cin.get(); 
} 

int main() 
{ 
    std::cout << "i: " << i << "code " << code << endl; 


    // hold output window open 
    wait(); 
    return 0; 
} 

operator = overloadの新しいラムダ構文はありますか?私はテスト関数を書くだろうが、それを呼び出す方法がわからない。

+0

いいえ、それはありません。あなたはそれを実行しようとしたことを観察したことがありますか? – litelite

+0

いいえ、そうではありません。あなたはlambdasでいくつかの読書を行う必要があります。 sidenoteとして、この '<< cout :: endl;'はコンパイルされません。 – Ron

+0

https://stackoverflow.com/questions/7627098/what-is-a-lambda-expression-in-c11 –

答えて

0

=は、すべての変数を値で取得することを意味します。&iは、iを参照によって取得する必要があることを示します。

mutableは、入力パラメータ値を変更できることを意味します。そして、これが全くないので、全く効果がありません。

0

[]の前に、lamdaはラムダのキャプチャリストです。 [=]と書かれている場合、ラムダで使用されるすべての自動変数をコピーで取得します。あなたの場合、これはiが参照によってキャプチャされ、code(ラムダ内で使用される他の自動変数)がコピーによってキャプチャされることを意味します。

mutableは、変数が変更可能にキャプチャされることを意味するため、ラムダはキャプチャされた変数を変更できます。しかし、ここのラムダは、キャプチャされた変数をとにかく変更しません...

0

私はまだ50のポイントを持っていないので、私は返信することはできません(私の以前の回答は、リンク)。

ラムダ式をテストする簡単な方法が見つかりましたが、コードサンプルの目的を理解できていないので、ここでは未加工です。私はそれはそれはブックSFMLゲーム開発からで、あなたの援助のためのすべてのstd::functions

int add(int a, int b) { return a + b }; 
// Assign a lambda expression to a function 
std::function<int(int, int)> adder1 = [] (int a, int b) { return a + b; }; 

int sum = adder1(3, 5); // same as add(3, 5)