加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 内联成员函数和普通成员函数之间有什么区别?

发布时间:2020-12-16 10:28:36 所属栏目:百科 来源:网络整理
导读:内联成员函数(函数体内联)和其他普通成员函数(单独的.cpp文件中的函数体)之间有什么区别吗? 例如, class A{ void member(){}}; 和 // Header file (.hpp)class B{ void member();};// Implementation file (.cpp)void B::member(){} 解决方法 绝对没有区别.
内联成员函数(函数体内联)和其他普通成员函数(单独的.cpp文件中的函数体)之间有什么区别吗?

例如,

class A
{
  void member(){}
};

// Header file (.hpp)

class B
{
  void member();
};

// Implementation file (.cpp)

void B::member(){}

解决方法

绝对没有区别.

两者之间的唯一区别是类中的成员被隐式标记为内联.但这没有实际意义.

见:inline and good practices

文档说明内联标记是编译器(开发人员)应该内联方法的提示.所有现代编译器都忽略了这个提示,并使用自己的内部启发式方法来确定何时应该内联一个方法(因为人类出了名而且做出了这个决定).

内联的另一个用途是它告诉链接器它可能期望看到方法的多个定义.当函数定义在头文件中时,获取头文件的每个编译单元都将具有该函数的定义(假设它不是内联的).通常这会导致链接器生成错误.使用内联标记,编译器可以理解为什么有多个定义,并且将从应用程序中删除除一个以外的所有定义.

关于内联进程的注意事项:方法不需要在头文件中内联.现代编译器有一个完整的应用程序优化过程,即使它们已经在不同的编译单元中编译,也可以考虑所有函数进行内联.由于内联标志通常被忽略,因此如果将方法放在标头或源文件中,则没有任何区别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读