新浪博客

在两个cpp文件出现同名类(且被调用的接口也同名)时

2024-03-15 22:23阅读:
1. 理论上,编译器在两个cpp文件出现同名类(且被调用的接口也同名)时,应该在链接时直接报错。 此时,要不用不同namespace罩住,要不改名字。
2.但事实上,不论是visual studio还是g++, 目前的有可能的行为是,谁先被编译,调用哪个同名类。
行为上,我个人理解为是work as design, 两者不约而同选择了上述方案,毕竟编译或者链接前检测同名符号是需要成本的,为了加速编译过程,厂商们都放弃了对具有共同接口的同名类的符号检测。
如 hello1.cpp, a.cpp 里面都有timer类,都有同样函数接口:
$g++ -o exe1 hello1.cpp a.cpp

$g++ -o exe2 a.cpp hello1.cpp
两者生成的可执行程序,第一个可执行程序exe1会调用hello1的timer类,第二个可执行程序exe2会调用a.cpp里面的timer类。
3. 在visual studio上,采用字母持续组织工程,哪个文件字典排序早,里面的类会被调用。
=================================================================
4.强调一下,同名同接口函数只允许有一个,否则链接报错,编译器这个同名检测机制都是有的。

我的更多文章

下载客户端阅读体验更佳

APP专享