c++ - 类的内联成员是如何编译的?

标签 c++ function class compilation

我是 c++(以及编程本身)的新手,这是我听到的:

如果我们编译一个普通函数,编译器会创建一个指向该函数的指针,并将构成函数体的指令放在别处。这就是普通函数的编译方式。但是对于内联函数,编译器会在编译期间生成代码并将其替换为内联函数调用。

我的问题是,当(C++ 类的)成员函数被编译时,它们是被视为内联函数还是被视为普通函数?

最佳答案

它们就像普通函数一样,有一个异常(exception):如果您在类定义中编写函数定义(下面的示例),那么该函数会自动获得 inline 关键字:

[C++11: 9.3/2]: A member function may be defined (8.4) in its class definition, in which case it is an inline member function (7.1.2), or it may be defined outside of its class definition if it has already been declared but not defined in its class definition.

struct T
{
   void foo()   // the same as `inline void foo()`
   {
      // ...
   }
};

不过,这并不意味着该类将被内联; inline 关键字只是一个提示,现在在决定是否实际内联一个函数时基本上被忽略了,尽管它确实会影响链接。

关于c++ - 类的内联成员是如何编译的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608905/

相关文章:

c++ - 如何取消引用函数指针并在 MSVC++ 下读取为数据?

javascript - new Function(...) 在 Debug模式下在 Chrome 58 中返回 undefined

javascript - 如何在 javascript 中调用未命名的实例?

c++ - C++中的多个降序对象

php spl_autoload_register() 不加载类

c++ - boost::visit_each 有什么用?

c++ - 为什么这个程序崩溃了?我错误地分配了内存吗?

C++ 'class' 类型重定义错误

function - AHK : Stop one hotkey from triggering another hotkey

javascript - javascript 函数声明两次