我是靠谱客的博主 懦弱烧鹅,最近开发中收集的这篇文章主要介绍关于C++类的inline 成员函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C++要求对一般的内置函数要用关键字inline声明,但对类内定义的成员函数,可以省略inline,因为这些成员函数已经被隐含地指定为内置函数了。
应该注意的是:如果成员函数不在类体内定义,而在类体外定义,系统并不是把它默认为内置函数,调用这些成员函数的过程和调用一般函数的过程是相同的。如果想将这些成员函数指定为内置函数,则应该加inline关键字,如:
class student
{
public:
inline void display(); //声明此成员函数不内置函数
private:
int num;
string name;
char sex;
};
inline void student::display() //在类外定义内置函数
{
//内容
}
值得注意的是:如果在类体外定义inline函数,则心须将类定义和成员函数的定义都放在同一个头文件中,否则编译时无法进行置换。
只有在类外定义的成员函数规模很小而调用频率高时,才将此成员函数指定为内置函数。

  1. class Date { 
  2. public: 
  3.     int day() const; 
  4.     // ... 
  5. private: 
  6.     int d, m, y; 
  7. inline int Date::day const { return d; } 

但是发现如果将函数声明和定义分开写在.h和.cc里面,虽然能编译成模块,但是却无法链接。
如以下例子:

Shell代码

  1. // test.h 
  2. #ifndef _TEST_H_ 
  3. #define _TEST_H_ 
  4. class test { 
  5. public: 
  6.     test(); 
  7.     test(int); 
  8.     void show() const; 
  9. private: 
  10.     int i; 
  11. #endif 
  12. // test.cc 
  13. #include <iostream> 
  14. #include "test.h"
  15. using namespace std; 
  16. test::test() 
  17. : i(0) 
  18. test::test(int _i) 
  19. : i(_i) 
  20. inline void show() const 
  21.     cout << i << endl; 
  22. // main.cc 
  23. #include "test.h"
  24. int main() 
  25.     test t(10); 
  26.     t.show(); 

在使用
$ g++ -c test.cc
$ g++ -c main.cc
时没有问题,但是在链接时
$ g++ -o test main.o test.o
会报错:
main.o(.text+0x35): In function `main':
main.cc: undefined reference to `test::show() const'

inline函数必须跟申明放在同一个文件中,因为它是需要就地展开的。
如果你不把它放在.h中的话,那么在你调用这个函数时,只要包含这个文件能就编译成目标文件,但是在链接时,却会发现找不到这个函数体,而无法展开,从而造成链接失败。

转载于:https://www.cnblogs.com/justinyo/archive/2013/03/13/2957504.html

最后

以上就是懦弱烧鹅为你收集整理的关于C++类的inline 成员函数的全部内容,希望文章能够帮你解决关于C++类的inline 成员函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部