类/结构中的内联语句

Inline statement in classes/structs

本文关键字:语句 结构      更新时间:2023-10-16

最近,我在头文件中遇到了inline -语句的两种用法:

(1)

class A {
  public:
    inline A() {
     // ...
    }
};

(二)

class A {
  public:
    inline A();
};
inline A::A() {
  // ...
}

例如(1)我听说使用inline是很好的风格。关于(2)我不确定如果使用inline是否会改变任何东西。那么,在任何一种情况下使用inline都是好的风格吗,它会影响编译吗?

在第一种情况下inline不需要,因为代码已经内联,与类成员同时定义和声明。

对于inline,我的意思是每个翻译单元都将获得自己的方法版本,该方法不会干扰链接。

在没有inline的第二个示例中,您将收到链接器错误,因为翻译单元不遵守一个定义规则:该方法在类内部声明,但在类外部定义,这对于编译器来说是不够的,您必须显式指定每个翻译单元将获得自己的方法副本(无论如何稍后将进行优化)。

请注意,这些注意事项不适用于内联含义,意思是省略直接用其主体替换其在调用站点的调用的方法,这是优化编译器的职责,它将处理它,你不应该费心暗示它。