LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1861|回复: 14

inline 应该写在 .h 文件里吗?

[复制链接]
发表于 2003-5-19 23:05:16 | 显示全部楼层 |阅读模式
各位见笑了,我突然有点迷糊了,假设如下类:

  1. /* person.h */
  2. class Person
  3. {
  4.    int m_age;
  5. public:
  6.    ...
  7.    inline int getAge();
  8. }
复制代码


如果我打算把 getAge() 弄成 inline 函数,inline 关键字是象上面那样要放在 class 的说明里面,还是象下面这样放在 getAge()的实现 person.cpp 里面?

  1. /* person.cpp */
  2. inline int
  3. Person::getAge()
  4. {
  5.   return m_age;
  6. }
复制代码


还是两处都要?

如果 class 的说明里面没有 inline ,编译时候没有问题,但是链接的时候会找不到函数的定义。

只在说明里面写 inline,实现部分不加 inline,就没有问题。可是难道定义界面的时候,就需要决定这个方法是 inline 的还是不是 inline 的么?
发表于 2003-5-20 07:04:23 | 显示全部楼层
我对c++也不熟悉,这个问题还是等无双兄来回答吧。
发表于 2003-5-20 08:34:29 | 显示全部楼层
是有
inline 编译时要把代码也编译进运
而不是声明个函数调用

所以不写在头文件中其它文件看不到
发表于 2003-5-20 10:47:16 | 显示全部楼层
在class内部定义的成员函数默认就是inline的吧
 楼主| 发表于 2003-5-20 11:41:17 | 显示全部楼层
class 的说明里面定义的成员函数是inline的.
只是inline成员函数写在class的说明里..., looks like Java
发表于 2003-5-20 18:31:44 | 显示全部楼层
如果代码很简单的话就写成inline形式
如果代码复杂的话写成函数形式

inline可以少了函数调用
使程序执行性能提高

但因为是代码每次调用都被展开
所以会增加可执行文件大小
 楼主| 发表于 2003-5-20 22:59:07 | 显示全部楼层
如果头文件里面只说明了这个函数是 inline 函数,当编译某个用
到该头文件的 cpp 文件时,编译器怎么才能找到函数体(在另外一个cpp文件中)呢?
发表于 2003-5-21 08:34:36 | 显示全部楼层
在另外cpp中不行
必须写在头文件中
 楼主| 发表于 2003-5-22 01:58:51 | 显示全部楼层
如果编译器只作一次扫描,应该是不行的了。
如果多次扫描的可不可能呢?
我是觉得函数的具体实现也要放在 .h 文件里面的话,搞不好就是牵一发动全身了。到时候修一个 bug,不知道要多少个文件需要重新编译过。
发表于 2003-5-22 08:35:24 | 显示全部楼层
司长也没有办法
因为inline函数编译时必须把它生成的代码写到调用的地方

普通函数只是在调用地方写一个函数调用
所以可以不知道i函数实现而编译成功
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表