编译器的函数返回类型验证
Function return type validation by compiler
我在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++是一种静态类型语言。
相关文章:
- 如何获取std::result_of函数的返回类型
- 奇怪的结构&GCC&clang(void*返回类型)
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 函数作为模板参数,是否对返回类型强制约束
- C++中函数的向量返回类型引发错误
- 检查函数返回类型是否与STL容器类型值相同
- 为什么返回类型中需要typename?C++
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 推导 std::vector::back() 的返回类型
- 在 c++ 中将函数返回类型指定为模板参数
- 使用 SWIG 更改生成的 CS 函数中的返回类型
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 编译器的函数返回类型验证
- 是否可以使用Boost概念检查库验证方法返回类型