lambda 参数中的结构化绑定
Structured binding in lambda arguments
为什么我不能在这种情况下使用 C++17 结构化绑定?
std::map<int, int> m;
std::find_if( m.cbegin(), m.cend(), []( const auto & [x, y] ){ return x == y; } );
结构化绑定仅适用于初始值设定项。您需要有一个可以绑定到的特定对象。您的 lambda 生成闭包,将使用一对地图的不同实例调用。可以使用结构化绑定的地方是在 lambda 体内 - 你有一对可以参考。
std::find_if( m.cbegin(), m.cend(), []( const auto & p ){
const auto& [x,y] = p;
return x == y;
});
为什么我不能在这种情况下使用 C++17 结构化绑定?
std::map<int, int> m;
std::find_if( m.cbegin(), m.cend(), []( const auto & [x, y] ){ return x == y; } );
结构化绑定仅适用于初始值设定项。您需要有一个可以绑定到的特定对象。您的 lambda 生成闭包,将使用一对地图的不同实例调用。可以使用结构化绑定的地方是在 lambda 体内 - 你有一对可以参考。
std::find_if( m.cbegin(), m.cend(), []( const auto & p ){
const auto& [x,y] = p;
return x == y;
});