在cpp里面加上inline,在头文件里面不加inline会内联吗?

kingstarer 2009-12-19 06:28:00

//a.h
class A
{ int max(); };

//a.cpp
inline
int A::max() {return MAX;}



这样有内联效果吗?

我原先是打算这样的

//a.h
class A
{ inline int max(); };

//a.cpp
inline
int A::max() {return MAX;}


但是这样,如果b.cpp包含了a.h 在把b.cpp编译成b.o时链接时就会出错
1540-0723 (S) The inline function "int max()" is referenced, but it is not defined.
make: *** [b.o] Error 1
...全文
640 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
febbird1984 2009-12-20
  • 打赏
  • 举报
回复
inline函数的声明和定义放同一个文件里
类的成员函数,声明和定义有一个写inline或者2个都写inline都是可以的;如果直接定义在类内部的,那么默认就是inline的,前面加不加inline都一样
dskit 2009-12-20
  • 打赏
  • 举报
回复
在cpp里面加上inline,在头文件里面不加inline会内联吗?
仅针对这个问题, 不一定, 请查看effective c++ 或 深度探索C++对象模型
zweifly 2009-12-19
  • 打赏
  • 举报
回复
和inline 没关系吧 链接的时候要把a.o 也链接进去
zweifly 2009-12-19
  • 打赏
  • 举报
回复
写哪里都可以 写几遍都可以
kiwigiving 2009-12-19
  • 打赏
  • 举报
回复
内联函数的定义要放在头文件当中的。
inline的声明可以放在类中成员函数的声明之中,也可以放在类外成员函数的定义之中。
//a.h
class A
{ int max(); };

inline
int A::max() {return MAX;}

或者

//a.h
class A
{ inline int max(); };

int A::max() {return MAX;}

只要两者中有一个声明为inline就可以了,不过内联函数的定义一定要放在类定义的文件中的,
放心,这样多次包含头文件时,不会造成函数的重定义的。
sunnypchen 2009-12-19
  • 打赏
  • 举报
回复
在.cpp里面加上inline,在.h里面不加inline会内联吗?

当然不会了,要报错

内联函数的声明有两种:隐式声明和显式声明
//a.h
class A
{
int max(){return MAX;} //隐式
};

//a.h
class A
{
int max;
};
inline int A::max() {return MAX;} //显式
macrojj 2009-12-19
  • 打赏
  • 举报
回复
嗯 内联不内联也不是你完全做主的

因为你选择了内联 然后 要用函数体去代替那个部分 如果代替的时候 看不见它 是不是就要报错嘛

所以把inline放在.h里面哈。

或者放在类体内。
  • 打赏
  • 举报
回复
头文件声明时需要内联,函数定义时可以忽略不计
lori227 2009-12-19
  • 打赏
  • 举报
回复
inline 函数需要写在.h文件里~~
lori227 2009-12-19
  • 打赏
  • 举报
回复
class A
{
inline int max(){return MAX;};
};

// 或者

class A
{
int max();
};

//a.h
inline
int A::max() {return MAX;}

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧