类定义内的成员函数会被定义在哪个对象文件(.obj)中?
问题解答
类内部直接定义的成员函数(比如你代码里CTest的Add和Subtract),C++标准默认会被当作inline(内联)函数处理,它的编译和链接逻辑和普通函数不一样:
- 只要有.cpp文件包含了这个头文件(不管是main.cpp还是CTest.cpp),编译时都会在对应的.obj文件(main.obj、CTest.obj)中生成该内联函数的副本(如果代码里调用了它,或者需要用到函数地址的话)。
- 链接阶段,编译器/链接器会自动合并这些重复的副本,不会触发多重定义的链接错误,这就是这种写法能正常运行的原因。
简单说,它不是只存在于某一个.obj文件里,而是每个用到它的.cpp对应的.obj中都会有相关代码,最后链接时会处理好重复的问题。
内容的提问来源于stack exchange,提问作者Chiara
相关产品推荐
相关产品推荐

