2 c++ templates inline function implicit
在C++中是否隐式内联了以下自由函数,类似于如果在类定义中定义了成员函数如何隐式内联?
void func() { ... }
Run Code Online (Sandbox Code Playgroud)
模板函数的行为方式是否相同?
小智 6
这取决于你的内联意思.编译器可以通过将其发出的代码内联到调用站点来优化任何函数.但是,如果您的意思是您所询问的代码行为就像声明它一样:
inline void func() { ... }
Run Code Online (Sandbox Code Playgroud)
然后答案是否定的.如果将代码放在两个不同的编译单元中并构建可执行文件,则会出现多个定义错误.如果您明确将该函数标记为"内联",则不会.
关于模板函数,然后编译系统的某些部分将看到同一模板的多个实例化不会导致多个定义错误.
不,它没有隐含地内联.编译器无法知道另一个模块是否会使用此函数,因此必须为其生成代码.
这意味着,例如,如果您在标头中定义类似的函数并包含两次标头,则会出现有关多个定义的链接器错误.显式inline修复.
当然,如果编译器认为函数有效,它仍然可以内联函数,但它与显式内联不同.
模板函数隐式内联,因为它们不需要inline防止多个定义错误.我不认为编译器也被强制内联,但我不确定.