【发布时间】:2019-01-24 07:30:51
【问题描述】:
我只是发现了一些无法理解的东西。我觉得应该和函数栈和一些未定义的行为有关。
假设我有一个函数工厂模板(傻一个):
template <unsigned int N=10>
std::function<int&&(const int& n)> build_add_function() {
return [](const int& n) -> int&& {std::move(n+N);};
}
如您所见,它缺少非 void 函数的 return 语句,因此编译器会向我发出警告... 奇怪的是它“按预期工作”
int main() {
auto foo = build_add_function();
std::cout << foo(10);
}
主要输出:20
当然,为了修复代码,我添加了return 语句,它给了我一个分段错误
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
我肯定对我正在做的事情有一些误解,但我就是无法理解。有人会向我解释这里发生了什么吗?
我正在使用gcc 版本8.0.1
编辑:刚刚在 gcc 4.8.1 上进行了测试,并且使用 return 语句按预期工作,没有编译错误。
它是编译器的东西吗?
【问题讨论】:
标签: c++ gcc lambda return c++14