我刚与同事讨论了头文件中的代码:
他说,头文件中定义的代码将始终由编译器内联(如我的示例头中的函数GetNumber()中的代码).我说有时,只要编译器决定这样做,它就会被内联.那么我们哪一个人必须带上一块蛋糕才能说出肮脏的谎言?或者也许我们都错了......?
MyClass.hpp
class MyClass
{
public:
MyClass();
~MyClass();
int GetNumber() const
{
//...;
return m_number;
};
private:
int m_number;
};
Run Code Online (Sandbox Code Playgroud)
Joe*_*oeG 12
在类中定义的任何函数(如您的GetNumber示例)而不是仅仅声明是隐式的inline.这意味着它与使用inline关键字无关,因此由于这些函数的多个定义,标题的多个包含不会导致链接错误.
大多数现代编译器都将其inline视为链接命令而已.有些编译器提供了更强大的关键字,例如CL __forceinline,这意味着"如果可以的话,可以这样做".
所以你是对的,也是错的.
你的朋友错了,你是对的.
内联不取决于代码的位置(标题或不标题).预处理后,没有标题或非标题.整个单元是一个单独的文件,它包含所有包含的东西.
尝试运行gcc预处理器,然后你会看到:
gcc -E some_source_file_with_includes
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4123 次 |
| 最近记录: |