【发布时间】:2021-01-29 07:25:56
【问题描述】:
我看不出这段代码有什么问题,但它给了我一个段错误。将 std::function 更改为普通函数可以解决问题。删除重载运算符中的加法也可以解决问题。将 Point 构造函数从 const int& 更改为 int 也可以解决问题。但我不明白为什么。 https://onlinegdb.com/Sy32UTllO
#include <iostream>
#include <functional>
struct Point
{
int x, y;
Point() {}
Point(const int& x, const int& y) {}
};
Point operator+(const Point& p1, const Point& p2) { return {p1.x+p2.x, p1.y+p2.y}; }
Point p1, p2;
std::function<const Point&()> fn = []{ return p1; };
int main()
{
Point p3 = fn() + p2;
return 0;
}
【问题讨论】:
-
p2未初始化? -
将ctor改为Point() : x{}, y{} {} 保证Point的对象默认初始化。
标签: c++