内联构造函数

时间:2013-08-03 19:15:03

标签: c++ inline

我试图完全理解内联的内容,但是当涉及到构造函数时我感到困惑。到目前为止,我理解内联函数会将函数放在它所调用的位置:

class X {
public:
     X() {}
     inline void Y() { std::cout << "hello" << std::endl; }
};
int main() {
     X x;
     x.Y; //so instead of this it will be: "std::cout << "hello" << std::endl;"
}

但这会做什么(如何取代?):

class X {
public:
     //or inline if the compilers feeling friendly for this example
     __forceinline X() {} 
}

1 个答案:

答案 0 :(得分:3)

inline的含义只是告知编译器将在此翻译中以及可能的其他翻译单元中定义有问题的结尾。编译器将此信息用于两个目的:

  1. 它不会将翻译单元中的功能定义为外部可见的唯一符号,即,您不会多次收到有关定义的符号的错误。
  2. 它可能会改变其关于是否要调用函数来访问函数或仅扩展使用它的代码的观点。它是否实际内联代码将取决于编译器可以内联的内容,它可能是合理的内联,也可能是月亮的阶段。
  3. 关于内联函数的类型没有区别。也就是说,它是构造函数,成员函数,正常函数等等。

    顺便说一句,在类定义中定义的成员函数是隐式声明的inline。没有必要明确提及它。 __forecedinline似乎是一个编译器扩展,假设它做了它所说的可能是一个坏主意,因为编译器在决定应该内联的内容方面要比人类好得多。