unj*_*nj2 1 c++ optimization inline function
在维基百科中的内联函数问题:http: //en.wikipedia.org/wiki/Inline_expansion#Problems
它说:"#语言规范可能允许程序对程序的参数做出额外的假设,这些程序在内联程序后就无法再进行."
有人可以详细阐述这一点吗?
你如何阻止GCC内联C++函数?
在C++中,inline
关键字实际上只有一个必需的含义:为该函数暂停一个定义规则(例如,该函数可以在几个转换单元中定义,并且代码仍然符合).
具体来说,使用inline
关键字不能确保内联生成该函数的代码.在类定义中定义函数也使它成为内联函数 - 但是,同样,这并不能确保其代码也将内联生成.
相反,在类定义之外定义的函数,没有inline
关键字可以并且仍然可以内联生成其代码.唯一的区别是,在这种情况下,函数的多个定义会使代码不符合要求.
最重要的是,可移植代码无法确保代码是否内联生成.但是,如果您不介意使代码不可移植,则可以使用__attribute__(noinline)
.
但是,我不会根据维基百科引用的引用来做这件事.维基百科几乎不是一个权威来源,即使它是,你所引用的只是一个模糊的陈述,关于某些假设条件下某些假设编译器的假设语言会发生什么.通常情况下,编写代码要清晰易读,并让编译器担心从中产生好的结果.