如果我没有将返回值放入其原型返回值的函数,该怎么办?

时间:2013-02-24 23:00:04

标签: c++ return return-value

我花了3个小时,可能更多,试图找到一个bug,segfault或bad_allow,这取决于我修改代码的方式,以便了解哪些对象弄乱了堆栈或内存:我把所有对象都放了有疑问......我屠杀了课程......(但事实证明这很好,因为那些课程最终显示自己无用:-))...

但实际上,真正的错误只是: 我没有在应该返回值的函数中编写一个返回语句(在我的情况下,我需要返回std::vector<boost::any>)。

我认为 gcc(4.6.3)没有它就无法编译。 而且我甚至更奇怪地记得在 ms visual 2010 中发生了类似的事情。

所以现在我想知道写一个return语句是否合法? 在这种情况下会发生什么?

是否与可以具有返回值的主要事实相关? 或者我应该考虑去 gcc 4.7

2 个答案:

答案 0 :(得分:10)

这是未定义的行为:

  

[C++11: 6.6.3/2]: [..] 在函数末尾流动相当于没有值的return;这会导致值返回函数中的未定义行为。

它编译是因为:

  1. 编译器不需要诊断它;
  2. 诊断这并不总是微不足道的,所以你的编译器不会打扰;
  3. C ++是一种“自己动手”的语言。

答案 1 :(得分:5)

如果使用标志-Wall -Wextra -pedantic进行编译它应该为您提供一个编译器警告,该警告关于应该返回值但不会返回值的函数。