C ++省略返回类型

时间:2013-12-26 12:22:42

标签: c++

这是我的测试代码,我不给函数一个返回值,但为什么这段代码可以通过编译器?我想知道我是否不将显式返回类型赋予下面的一个函数,编译器将生成什么?

这是测试代码,谢谢。

#include <iostream>
#include <vector>
using std::vector;
vector<vector<int> > testReturn(){
    int test = 5;
}
int main(){
    testReturn();
    return 0;
}

4 个答案:

答案 0 :(得分:1)

您不能总是信任编译器,因为不同的编译器在编译时具有不同的检查条件。如果您没有返回需要返回的函数,即使编译成功,结果仍然是未定义。这就是你的程序崩溃的原因。你应该总是尽量避免这种情况。

答案 1 :(得分:1)

这是一个错误的代码,产生undefined behavior

这样的代码(带有返回类型的函数,没有实际的返回语句的函数)确实在某些变量中编译了一些编译器。然而,这只意味着编译器中存在一个错误,它应该发出警告/错误。

答案 2 :(得分:1)

  

我不给函数一个返回值,但为什么这段代码可以通过编译器?

在C中提供return值是可选的。此规则也“迁移”到C ++,添加了一长串未定义的行为(即允许编译无效程序的情况)。对于C ++来说,编译器会以相当明确的术语警告你这样的情况。

  

我很想知道如果我没有给下面的一个函数提供显式返回类型,编译器会生成什么代码?

编译器不会生成任何用于处理返回值的代码。无论CPU寄存器的任意状态和闭合括号中的内存是什么,这都是“返回”的状态。试图将任意值解释为返回值是导致崩溃的原因。

答案 3 :(得分:0)

代码无法编译,因为testRunner的返回类型是整数向量的向量。

所以回来吧!

相关问题