注意:这不是关于如何使用内联函数或它们如何工作的问题,更多的是为什么它们按照它们的方式完成.
类成员函数的声明不需要定义函数inline,它只是函数的实际实现.例如,在头文件中:
struct foo{
void bar(); // no need to define this as inline
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么一类功能的内嵌实施有是在头文件?为什么我不能把内联函数放在.cpp文件中?如果我在哪里尝试将内联定义放在.cpp文件中,我会得到一个错误:
error LNK2019: unresolved external symbol
"public: void __thiscall foo::bar(void)"
(?bar@foo@@QAEXXZ) referenced in function _main
1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe
: fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud) 可能重复:
C++中的内联函数
现代编译器在决定应该内联什么和不应该什么时,比程序员更好.就像register,不应该内联函数只是编译器的工作,并被认为是过早的优化?
模板类的方法是否隐含了inline链接(不是在谈论内联优化),还是只是模板化的方法?
// A.h
template<typename T>
class A
{
public:
void func1(); // #1
virtual void func2(); // #2
template<typename T2> void func3(); // #3
};
template<typename T>
void A<T>::func1(){} // #1
template<typename T>
void A<T>::func2(){} // #2
template<typename T>
template<typename T2>
void A<T>::func3<T2>(){} // #3
Run Code Online (Sandbox Code Playgroud)
以上所有案例都是inline[联系]吗?(我应该明确写inline任何一个)?
通常我更喜欢完全拆分声明和定义,因此,我倾向于定义内联方法,.cpp
我只是希望链接优化器在不同的编译单元中使用它时将其内联。
我的问题是:
c++ ×4
inline ×4
c++-faq ×1
compilation ×1
linkage ×1
linker ×1
optimization ×1
templates ×1
theory ×1