C++14 の Initialized lambda captures を試してみた

Clang 3.4(svn) では既に実装されていたので軽く試してみました。

[ソース]

#include <iostream>

int
main(){
    int x = 4;
    auto y = [&r = x, x = x + 1](){
        r += 2;
        return x + 2;
    };
    std::cout << "x = " << x << " y = " << y() << std::endl;
    std::cout << "x = " << x << " y = " << y() << std::endl;
    std::cout << "x = " << x << " y = " << y() << std::endl;
    return 0;
}

[出力]

x = 4 y = 7
x = 6 y = 7
x = 8 y = 7


うーむむ、慣れるまでに時間がかかりそう。
どういう場合に有効的に活用できるだろうか。

[コンパイラ]

  • clang++ (LLVM) 3.4 20131004(trunk)