13

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

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

1 回答 1

11

结构化绑定仅适用于初始化程序。您需要有一个可以绑定的特定对象。您的 lambda 使闭包将被不同的映射对实例调用。可以使用结构化绑定的地方是在 lambda 主体内 - 你有一对可以参考。

std::find_if( m.cbegin(), m.cend(), []( const auto & p ){ 
    const auto& [x,y] = p;
    return x == y; 
}); 
于 2019-08-01T11:08:17.587 回答