大佬教程收集整理的这篇文章主要介绍了c – 不返回lambda奇怪的行为,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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 – 不返回lambda奇怪的行为全部内容,希望文章能够帮你解决c – 不返回lambda奇怪的行为所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。