lambda表达式中的std :: pair

Ath*_*ase 3 c++ lambda c++11

我只想知道如何在lambda表达式捕获括号内编写对.因为下面的代码没有编译所以我错过了一些东西......

std::vector<std::pair<std::string, std::string>> container1_;

for( auto iter : container1_ )
{
    auto result = std::find_if( container2_.cbegin(), container2_.cend(),
        [iter.first]( const std::string& str )->bool { return str == iter.first; } );
}

In member function ‘bool MsgChecker::CheckKeys()’:
error: expected ‘,’ before ‘.’ token
error: expected identifier before ‘.’ token
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 8

  [iter.first]( const std::string& str )->bool { return str == iter.first; }
// ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

Lambda捕获用于标识符,不用于任意表达式或其他任何内容.

刚进入iter:

  [iter]( const std::string& str )->bool { return str == iter.first; }
Run Code Online (Sandbox Code Playgroud)

[C++11: 5.1.2/1]:

[..]

 capture:
   标识符
   & 标识符
   this

[C++11: 2.11/1]:标识符是任意长的字母和数字序列.[..]

  • 对于后人来说,已经为C++ 1y(不确定提案的状态)提出了类似`[bob = iter.first]`之类的表达式捕获,以便允许逐个移动.所以,如果你在5年内阅读这篇文章...... (2认同)
  • @Yakk在2次会议前接受了工作文件; N3690中有文字.最后的语法使用`{}`初始值设定项,例如``[bob {iter.first}]`. (2认同)