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

Ste*_*and 5 c++ return return-value

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

但是,确实,真正的错误很简单: 我没有在一个应该返回一个值的函数中写一个return语句(在我的情况下我需要返回一个std::vector<boost::any>).

我认为gcc(4.6.3)没有它就无法编译.而且我甚至觉得奇怪的是,我记得ms使用了这个类似的东西.

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

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

Lig*_*ica 10

这是未定义的行为:

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

它编译是因为:

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

  • 第三部分是"C++是一种语言,如果你做坏事,你必须只责怪自己".大多数具有足够警告的编译器都会警告这类事情.但是有些可能不会 - 而且只有当你打开优化时才有一些编译器,因为它需要一些"流程分析",这是优化的一部分. (3认同)

het*_*fan 5

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