dob*_*ler 9 c++ gcc inline duplicates
我有一个带有内联函数的命名空间,如果有多个源文件,它将被使用.尝试链接我的应用程序时,内联函数将报告为重复符号.似乎我的代码不会内联函数,我想知道这是否是预期的行为以及如何最好地处理它.
我使用以下gcc选项:-g -Wextra -pedantic -Wmissing-field-initializers -Wredundant-decls -Wfloat-equal -Wno-reorder -Wno-long-long相同的代码样式似乎在构建时正确编译和链接一个VC7环境.
以下代码示例显示了代码的结构:
/* header.h */
namespace myNamespace {
inline bool myFunction() {return true;}
}
/* use_1.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
/* use_2.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
Run Code Online (Sandbox Code Playgroud)
Kar*_*nek -1
inline 关键字仅被编译器视为提示。如果编译器认为该函数在不内联的情况下性能会更好,则不会内联它。有一些特定于供应商的关键字使编译器内联函数 - 它__attribute__((always_inline))适用于 GCC 和__forceinlineVisual C++。
如果您确实想确保您的函数在所有标准编译器上的所有情况下都不会导致链接器错误,您可能希望将其模板化,因为即使在标头中定义,模板化函数也保证不会导致链接器错误。然而,对于非常简单的功能来说,这是完全没有必要的。