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

Raj*_*hta 1 c++

我在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();
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 5

符号(不仅仅是函数)名称修改在链接阶段发挥作用.您收到编译错误.

编译器没有看到错位的名称.它只是看到你有一个被调用的函数func,它返回一个int并且没有参数,所以可以告诉你你的代码是非法的.


Alo*_*ave 5

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

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

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

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