编译器对函数返回类型的验证 我在C++中用Bruce Eckel的思想阅读,当C++编译器遇到一个函数时,它使用它的名称和参数来修饰它的名称。 对于函数,int func(char ch);它会将其名称修饰为_func_char,而不使用返回类型

编译器对函数返回类型的验证 我在C++中用Bruce Eckel的思想阅读,当C++编译器遇到一个函数时,它使用它的名称和参数来修饰它的名称。 对于函数,int func(char ch);它会将其名称修饰为_func_char,而不使用返回类型,c++,C++,那么,, 在下面的程序中,当编译器在函数名修饰期间没有存储返回类型时,它如何抱怨“从int到const char*的转换无效”?谁能澄清一下吗 #include <iostream> using namespace std; int func() { int i = 5; return i; } int main() { string str = func(); } #包括 使用名称空间std; int func() { int i=5; 返回i; }

那么,, 在下面的程序中,当编译器在函数名修饰期间没有存储返回类型时,它如何抱怨“从int到const char*的转换无效”?谁能澄清一下吗

#include <iostream>

using namespace std;

int func()
{
    int i = 5;
    return i;
}

int main()
{
    string str = func();
}
#包括
使用名称空间std;
int func()
{
int i=5;
返回i;
}
int main()
{
字符串str=func();
}
符号(不仅仅是功能)名称损坏在链接阶段起作用。您得到了一个编译器错误

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

符号(不仅仅是函数)名称篡改在链接阶段起作用。您得到了一个编译器错误


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

这是一个编译错误。
编译器根据C++标准规范检查C++程序的有效性。 编译器为什么在此处报告错误?

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


注意,语言是这样设计的,编译器允许进行这种类型检查,C++是<强> < /强> .< /p> < p>这是编译错误。 编译器根据C++标准规范检查C++程序的有效性。 编译器为什么在此处报告错误?

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


请注意,该语言的设计方式允许编译器执行此类类型检查,C++是一个<强> < /> > .< /p>名称是用来链接的。编译器仍然知道编译单元中函数的所有功能。两个函数不能存在相同的参数,但不同的返回类型,因此不必在返回类型中进行Myle。了解编译单元中函数的所有需要了解的信息。两个函数不能具有相同的参数,但返回类型不同,因此不必更改返回类型。