最近,我在头文件中遇到了inline
- 语句的两种用法:
(1)
class A {
public:
inline A() {
// ...
}
};
(2)
class A {
public:
inline A();
};
inline A::A() {
// ...
}
例如(1)我听说使用inline
是一种很好的风格。关于(2)如果使用inline
,我不确定是否会改变任何内容。
那么,在任何一种情况下都使用inline
并且它会影响编译吗?
答案 0 :(得分:1)
在第一种情况下,不需要inline
,因为已经内联代码被定义并与类成员同时声明。
inline
的位置我的意思是每个翻译单元都会获得自己的方法版本,不会影响链接。
在没有inline
的第二个示例中,您将收到链接器错误,因为翻译单元不尊重one definition rule:该方法在类中声明但在外部定义,这对于编译器,你必须明确指定每个翻译单元将获得自己的方法副本(以后将优化)。
请注意,这些注意事项不适用于内联含义,意味着将替换其调用位置调用的方法直接替换为,这是优化编译器的职责。照顾它,你不应该打扰它。