天哪,我最讨厌的一个。
inline
static
或
extern
外人
,
内联
据说
内联
提示编译器您认为函数应该内联。1998年可能是这样,但十年后,编译器不需要这样的提示。更不用说人类在优化代码时通常是错误的,所以大多数编译器完全忽略了“提示”。
-
静止的
-变量/函数名不能用于其他转换单元。链接器需要确保不会意外使用另一个翻译单元的静态定义变量/函数。
-
外人
-在这个翻译单元中使用这个变量/函数名,但如果没有定义,不要抱怨。链接器将对其进行分类,并确保所有试图使用某个外部符号的代码都有其地址。
-
内联
-这个函数将在多个翻译单元中定义,不用担心。链接器需要确保所有翻译单元使用变量/函数的单个实例。
注:
内联
内联
已经然而,模板的显式专门化和实例化
require
inline
供使用。
对您的问题的具体回答:
-
仅当您希望在标题中定义函数时。更确切地说,只有当函数的定义可以在多个翻译单元中显示时。在头文件中定义小函数(如在一行程序中)是一个好主意,因为它在优化代码时为编译器提供了更多信息。它还增加了编译时间。
-
什么时候我不应该为C++中的函数/方法写关键字“内联”?
-
编译器什么时候不知道什么时候让函数/方法“内联”呢?
一般来说,编译器会比您做得更好。但是,如果没有函数定义,编译器就不能选择内联代码。在最大优化的代码中,通常所有
private
__attribute__(( noinline ))
__declspec(noinline)
-
当为函数/方法编写“内联”时,应用程序是否是多线程的,这有关系吗?
多线程不会以任何方式影响内联。