gpt4 book ai didi

c++ - 为什么这个 std::function 和运算符会导致段错误?

转载 作者:行者123 更新时间:2023-12-04 02:28:07 24 4
gpt4 key购买 nike

我没有发现此代码有任何问题,但它给我一个段错误。将 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;
}

最佳答案

std::function<const Point&()> fn = []{ return p1; };

因为您没有指定 lambda 的返回值,所以它默认返回它按值。所以 fn 试图返回对临时对象的引用,这是未定义的行为。

改为这样做:

std::function<const Point&()> fn = []() -> const Point& { return p1; };

关于c++ - 为什么这个 std::function 和运算符会导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65946626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com