【发布时间】:2025-11-24 13:30:01
【问题描述】:
在*的内联函数问题中: http://en.wikipedia.org/wiki/Inline_expansion#Problems
它说:“# 语言规范可能允许程序对过程的参数做出额外的假设,在过程被内联后它不能再做出这些假设。”
有人可以详细说明这一点吗?
如何防止 GCC 内联 C++ 函数?
【问题讨论】:
-
"如何防止 GCC 内联 C++ 函数?"通常,这是错误的问题。正确的问题经常是“为什么要阻止 GCC 内联 C++ 函数?”
-
我相信原因与别名有关。当只是调用一个函数时,编译器可以忽略调用函数中的指针,这些指针可能会为被调用函数中指向的对象起别名。内联时,被调用函数的代码与调用函数的代码在同一块中执行,因此别名成为问题。
-
@litb,我还是没看到。我们能看一个具体的例子吗?
-
这是一个具体的例子: class MyClass{ public: static MyClass* getInstance(){MyClass 我自己;返回 &myself;} }
标签: c++ optimization function inline