类/结构中的内联语句

时间:2016-02-21 18:42:00

标签: c++ inline

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

(1)

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

(2)

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

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

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

1 个答案:

答案 0 :(得分:1)

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

inline的位置我的意思是每个翻译单元都会获得自己的方法版本,不会影响链接。

在没有inline的第二个示例中,您将收到链接器错误,因为翻译单元不尊重one definition rule:该方法在类中声明但在外部定义,这对于编译器,你必须明确指定每个翻译单元将获得自己的方法副本(以后将优化)。

请注意,这些注意事项不适用于内联含义,意味着将替换其调用位置调用的方法直接替换为,这是优化编译器的职责。照顾它,你不应该打扰它。