c++std::函数返回意外值
c++ std::function returns unexpected value
#include <iostream>
typedef std::function<bool(int)> set;
using namespace std;
set singletonSet(int a) {
return [&] (int x) { return (a == x); };
}
bool contains(set s, int test) {
return s(test);
}
int main() {
auto first = singletonSet(5);
auto r1 = contains(first, 10);
auto r2 = contains(first, 5);
cout << r1 << " " << r2 << endl;
return 0;
}
我希望打印0 1
,但结果是1 1
如果这是一个基本错误,这里的初学者c++labmda程序员非常抱歉。
不要通过引用捕获a
,而是通过值捕获。照原样,您将在lambda中存储一个悬空引用,稍后使用它将导致UB。
set singletonSet(int a) {
return [=] (int x) { return (a == x); };
// ^
}
相关文章:
- C++析构函数被意外调用双链表
- 概念解析为使用 std::make_signed_t 时意外的函数模板
- 类中静态函数C++意外结果
- C++意外调用继承类的函数
- 模板函数意外的结果
- 在调用 std::bind 的产品后意外调用析构函数
- C++将派生类的const值传递给基意外行为的构造函数
- 移动构造函数的意外调用
- 使用类/函数模板组合进行意外诊断
- 函数调用中出现意外编译错误 (C++)
- 使用相同的函数时意外收到"std::out_of_range"错误
- 在第三个 pary 函数中使用矢量引用时出现意外错误
- C++ std::find() 寻址返回向量的类函数时的意外行为
- 基于范围的 std::move 调用意外复制构造函数
- 意外输出..函数绑定在虚拟表中的发生方式
- 在 c++ 中使用函数装饰器(使用闭包)时出现意外的分段错误
- C++中出现意外的编译错误:将默认值传递给函数参数
- 是什么导致了构造函数之后的这些"意外令牌"错误?
- 意外缺少隐式声明的复制/移动构造函数
- 在 winapi 回调函数上返回 FALSE 时出现意外行为(循环被跳过?