我刚刚花了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
;这会导致在值返回函数中出现未定义的行为。
它之所以编译,是因为:
- 编译器不需要对其进行诊断
- 诊断这一点并不总是微不足道的,所以您的编译器并不麻烦
- C++是一种"自己动手"的语言
如果您使用标志-Wall -Wextra -pedantic
进行编译,它应该向您发出编译器警告,告诉您某个函数应该返回值,但没有返回。