如果我不将返回值放入原型返回值的函数怎么办



我刚刚花了3个小时,可能更多的时间,试图找到一个bug,segfault或bad_allow,这取决于我修改代码的方式,以便了解是什么对象扰乱了堆栈或内存:我怀疑我的所有对象。。。我屠杀阶级。。。(尽管如此,这还是很好的,因为这些课程最终显示出自己毫无用处:-(。。。

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

我认为gcc(4.6.3(如果没有它就不可能编译。当我想起类似的事情发生在我身上时,我感到更加奇怪msvisual2010

所以现在我想知道不写报税表是否合法??在这种情况下会发生什么?

它是否与可以具有返回值的main有关?还是应该考虑转到gcc 4.7

这是未定义的行为:

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

它之所以编译,是因为:

  1. 编译器不需要对其进行诊断
  2. 诊断这一点并不总是微不足道的,所以您的编译器并不麻烦
  3. C++是一种"自己动手"的语言

如果您使用标志-Wall -Wextra -pedantic进行编译,它应该向您发出编译器警告,告诉您某个函数应该返回值,但没有返回。

最新更新