编译器的函数返回类型验证

Function return type validation by compiler

本文关键字:验证 返回类型 函数 编译器      更新时间:2023-10-16

我在Bruce Eckel的《Thinking in C++》中读到,当C++编译器遇到一个函数时,它会使用它的名称和参数来装饰它的名字。对于一个函数,int func(char ch);它会将其名称装饰为_func_char它不使用返回类型。

在这种情况下,在下面的程序中,编译器在函数名称修饰期间没有存储返回类型时,如何抱怨"从 int 到 const char* 的无效转换"?谁能澄清一下?

#include <iostream>
using namespace std;
int func()
{
    int i = 5;
    return i;
}
int main()
{
    string str = func();
}

符号(不仅仅是函数)名称重整在链接阶段发挥作用。您收到编译器错误。

编译器看不到损坏的名称。它只是看到你有一个名为 func 的函数,它返回一个int并且不带任何参数,因此可以告诉你你的代码是非法的。

这是一个编译错误。
编译器根据C++标准规范检查C++程序的有效性。

为什么编译器在此处报告错误?

因为编译器可以看到函数的返回类型是int的,并且它用于初始化类型为 std::string 的变量,并且没有有效的隐式转换。

请注意,该语言的设计方式允许编译器执行这些类型检查,C++是一种静态类型语言