在维基百科的内联函数问题中: http://en.wikipedia.org/wiki/Inline_expansion#Problems
它说:“# 语言规范可能允许程序对过程的参数做出额外的假设,这些假设在过程被内联后不能再做出。”
有人可以详细说明这一点吗?
如何防止 GCC 内联 C++ 函数?
最佳答案
在 C++ 中,inline
关键字实际上只有一个 required 含义:该函数暂停了 One-Definition Rule(例如,函数可以定义在几个翻译单元,代码仍然符合)。
具体来说,使用 inline
关键字并不能确保该函数的代码将内联生成。在类定义中定义一个函数也使它成为一个内联函数——但是,这同样不能确保它的代码也将内联生成。
相反,在类定义之外定义的函数,如果没有 inline
关键字,它的代码仍然可以内联生成。唯一的区别是,在这种情况下,函数的多个定义会导致代码不符合规范。
最重要的是,可移植代码无法确保代码是或不是内联生成的。但是,如果您不介意使代码不可移植,则可以使用 __attribute__(noinline)
。
但是,我不会根据引用自维基百科的引述来这样做。维基百科几乎不是权威来源,即使是,您所引用的也只是关于在某些假设条件下某些假设编译器上某些假设语言可能发生的情况的模糊陈述。通常最好编写清晰易读的代码,让编译器担心从中生成好的结果。
关于c++ - 混淆内联函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1601598/