【 在 misslost 的大作中提到: 】
: 某些三方库只有header文件,比如 spdlog 等等。
: 如果项目中有 a.cpp b.cpp都include这些header文件,编译之后a.obj b.obj都有函数的实现代码,那么a和b link的时候,不会有冲突吗?
其实, 头文件是用来声明的, 并不会应该定义任何东西, 它只是一个原型声明的作用,
通常的类定义, 类方法如果有实现,都是内联的, 其实类似于宏的语义了,结构体定义, 一般要typedef
而不声明struct 变量, 涉及变量的, 要用extern等等。
如果, 你使用定义语句, 比如定义变量, 那会出现多个全局变量,显然会有重定义的冲突。
c++ 因为有模块范围的概念,比如用static修饰。 虽然,不冲突, 但可能偏离语义, 它们是指向不同内存的变量,虽然名字一样。
所以, 我理解的, 所谓header only的头文件,
智慧有宏, 模板, 类型定义, 内联函数之类的东西, 如果被不同的模块, 不同的cpp文件包含,
会不会被编译器优化, 我的理解和优化模板或内联函数是一样的吧
--
修改:poggy FROM 124.126.2.*
FROM 124.126.2.*