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

时间:2012-05-29 09:01:00

标签: 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();
}

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:5)

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

  

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

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

请注意,语言的设计方式允许编译器进行这类类型检查,C ++是 statically typed language