c++ - 混淆内联函数的问题

标签 c++ optimization function inline

在维基百科的内联函数问题中: 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/

相关文章:

jquery - 当取消选中复选框时,找到所有具有匹配类的 div 并将其删除。查询

c++ - VC++ 注释、文档和 IntelliSense

c++ - 了解 CComBSTR 赋值运算符

c++ - 模板函数指针作为模板参数

c++ - 将 Bitshift 优化为数组

optimization - 在 Tomcat 6 中加速图像

Oracle:如何创建函数返回 "SELECT * FROM tab WHERE name IN (function())"的值

c++ - 哪个会更快

excel - 优化问题。查询不适用于超过 5 个股票代码。每次我用 5 个股票运行它平均需要 5-6 分钟

python - Tornado 异步调用一个函数