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 文档说明内联标记是编译器(开发人员)应该内联方法的提示.所有现代编译器都忽略了这个提示,并使用自己的内部启发式方法来确定何时应该内联一个方法(因为人类出了名而且做出了这个决定). 内联的另一个用途是它告诉链接器它可能期望看到方法的多个定义.当函数定义在头文件中时,获取头文件的每个编译单元都将具有该函数的定义(假设它不是内联的).通常这会导致链接器生成错误.使用内联标记,编译器可以理解为什么有多个定义,并且将从应用程序中删除除一个以外的所有定义. 关于内联进程的注意事项:方法不需要在头文件中内联.现代编译器有一个完整的应用程序优化过程,即使它们已经在不同的编译单元中编译,也可以考虑所有函数进行内联.由于内联标志通常被忽略,因此如果将方法放在标头或源文件中,则没有任何区别. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |