c++ - lambda 参数中的结构化绑定(bind)

标签 c++ c++17 structured-bindings

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

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

最佳答案

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

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

关于c++ - lambda 参数中的结构化绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57307102/

相关文章:

c++ - 您自己的类型的结构化绑定(bind)不是结构或元组(通过公共(public)成员函数)

c++ - cvBlob/Opencv : Why is my output variable empty?

c++ - constexpr if 的等效三元运算符?

java - C++(OpenCV) 中 k-NN 示例的问题

c++ - copy_file 何时实际返回 false?

C++ 序列点和 C++17 中求值顺序的变化

c++ - 通过结构化绑定(bind)从对/元组元素移动

c++ - C++17 中的初始化列表和结构化绑定(bind)推导歧义

C++只用一个字符串反转一个字符串

c++ - app -> 回调调用时扩展崩溃