可能是重复问题:
C++中的内联函数
现代编译器比程序员更擅长决定哪些内容应该被内联,哪些不应该。就像register
一样,内联函数是否应该只由编译器完成,并且被视为过早优化呢?
可能是重复问题:
C++中的内联函数
现代编译器比程序员更擅长决定哪些内容应该被内联,哪些不应该。就像register
一样,内联函数是否应该只由编译器完成,并且被视为过早优化呢?
inline
有一个双重含义,许多人并不知道——它允许在多个翻译单元中定义函数(即,如果您在头文件中定义了一个未绑定的函数,并在各种翻译单元中包含它,则必须将其声明为inline,否则链接器会抱怨符号被重复定义)。
第二个含义是对编译器的提示,该函数可能从在调用者处内联其机器代码。你是对的,现代编译器/优化器应该能够自己想出这个问题。
我的建议是只在需要时使用inline
(第一种情况),永远不要向编译器传递优化提示。这样,您的源代码中就可以解决这个疯狂的双重含义。
inline
只是与优化略有关联。
如果您需要其提供的“一次定义规则”例外,应选择将inline
应用于函数,否则不要使用。大多数情况下,无论函数是否声明为inline
,您都可以依赖编译器执行适当的优化。
看看这个答案:内联此函数还是不内联?
基本上,是的,在当前情况下,内联是编译器的任务。最初创建内联的目的是告诉编译器它应该尝试。关键字是指示 - 编译器可以选择是否内联函数。
inline
关键字不仅用于内联函数。实际上,当你想一想时,它根本不是用于内联函数的! :-) - Fyodor Soikin