【问题标题】:Function return type validation by compiler编译器的函数返回类型验证
【发布时间】:2012-05-29 09:00:59
【问题描述】:

我在 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();
}

【问题讨论】:

标签: c++


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    为什么编译器会在这里报错?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多