C++编程思想 第1卷 第7章 函数重载与默认参数 名字修饰符 类型安全连接

名字修饰符的好处,如果用户错误地声明了一个函数,编译器会按函数被调用
的方式去推断函数的声明

在C++中,所有函数被使用前要事先声明
名字修饰符给我们提供一个安全网,类型安全连接 

//: C07:Def.cpp {O}
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Function definition
void f(int) {}
///:~

函数在错误的声明后调用

//: C07:Use.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
//{L} Def
// Function misdeclaration
void f(char);

int main() {
  f(1); // Causes a linker error
} ///:~

即使知道函数实际上是f(int),当编译器不知道
在C中,这样连接可以成功,但C++不行
C++编译器会修饰这些名字,变成f_int之类的名字
使用的函数是f_char
但连接器试图找到f_char引用,只找到f_int,会出错
这就是安全连接,尤其在大项目中
C++编译器可以查找C语言中很隐蔽的错误

编译错误
>Use.obj : error LNK2019: 无法解析的外部符号 "void __cdecl f(char)" (?f@@YAXD@Z),该符号在函数 _main 中被引用
 

猜你喜欢

转载自blog.csdn.net/eyetired/article/details/81141072