lambda 参数中的结构化绑定

Kil*_*KRT 10 c++ c++17 structured-bindings

为什么在这种情况下我不能使用 C++17 结构化绑定?

std::map<int, int> m;
std::find_if( m.cbegin(), m.cend(), []( const auto & [x, y] ){ return x == y; } );
Run Code Online (Sandbox Code Playgroud)

raf*_*x07 9

结构化绑定仅适用于初始值设定项。您需要有一个可以绑定的特定对象。您的 lambda 会生成闭包,该闭包将使用映射对的不同实例进行调用。可以使用结构化绑定的地方是在 lambda 体内 - 您有一对可以参考。

std::find_if( m.cbegin(), m.cend(), []( const auto & p ){ 
    const auto& [x,y] = p;
    return x == y; 
}); 
Run Code Online (Sandbox Code Playgroud)

  • 回复:“结构化绑定仅适用于初始化程序” - 问题是,函数参数准确指定*初始化上下文*。因此,理论上,结构化绑定似乎可以在那里使用。(当然,如果有人提出这样的建议,则需要进一步的语言演变。) (13认同)