C++省略返回类型

C++ omitting return type

本文关键字:返回类型 C++      更新时间:2023-10-16

这是我的测试代码,我没有给函数一个返回值,但是为什么这段代码可以通过编译器呢?我想知道如果我不像下面这样为一个函数提供显式返回类型,编译器将生成什么?

这是测试代码,谢谢。

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

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

这是一个不正确的代码,会产生未定义的行为。

这样的代码(带有返回类型位而没有实际返回语句的函数)确实使用某些编译器在某些变体中进行编译。但是,这只意味着编译器中存在一个错误,它应该给出警告/错误。

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

在 C 中提供 return 值是可选的。此规则也"迁移"到C++,添加到一长串未定义的行为(即允许编译无效程序的情况)中。C++值得称赞的是,编译器确实以相当明确的术语警告您此类情况。

我想知道如果我不像下面这样为一个函数提供显式返回类型,编译器将生成代码是什么?

编译器不会生成任何用于处理返回值的代码。无论 CPU 寄存器和右大括号处的内存的任意状态是什么,这就是将要"返回"的状态。尝试将任意值解释为返回值会导致崩溃。

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

所以归还它!