classes/structs 中的内联语句

Inline statement in classes/structs

最近,我在头文件中发现了 inline 语句的两种用法:

(1)

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

(2)

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

inline A::A() {
  // ...
}

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

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

inline 我的意思是每个翻译单元都会有自己的方法版本,不会干扰链接。

在没有 inline 的第二个示例中,您将收到链接器错误,因为翻译单元不遵守 one definition rule:该方法在 class 内部声明但在外部定义,这对编译器来说还不够,您必须明确指定每个翻译单元都将获得自己的方法副本(无论如何都会在以后进行优化)。

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