关于内联函数的定义问题

leboc 2008-11-14 12:25:00

内联函数应该"定义"在头文件中,与其他函数不同.

这句话,有点不能理解.

要是把内联函数"申明"在头文件中,定义在源文件中,有什么不同吗?
...全文
412 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Laura_li 2008-11-14
  • 打赏
  • 举报
回复
就是内联函数就是为了减少函数调用时的资源开销!
如果函数简单的情况下写为内联函数! 复杂就不要写为内联函数了!
还有如果函数会在很多其他的文件中被调用就写在头文件中。这样便于文件的管理和提高查找的速度。
yshuise 2008-11-14
  • 打赏
  • 举报
回复
一般简单的都是可以定义在.cpp中。
如果这个函数调用了其它的文件的函数,而这个函数又不是内联的,肯定链接通不过。
jackzhhuang 2008-11-14
  • 打赏
  • 举报
回复
内联发生在编译时,编译器仅仅是展开函数,没有调用它,这样必须声明定义都在头文件。

但不是所有时候都会这样,有时你声明内联,但仍然是属于函数调用,不会展开。
wuyu637 2008-11-14
  • 打赏
  • 举报
回复
内联函数就是把函数在调用的地方,用代码展开的形式,避免函数调用的消耗。


这样就会有一个问题,一个函数一般都是在好几个文件中被调用,c++采用的编译方式是将。h文件附加到.cpp之前编译的,如果放在.cpp文件中,就会加大
编译器的工作量和编写复杂度,(要把所有.cpp文件扫描一下,找内联函数,提出来,然后在使用的地方做替换)。

如果在.h中定义的话,就可以简单很多
qqwx_1986 2008-11-14
  • 打赏
  • 举报
回复
没什么不一样
只要在定义的前面加上inline
记住只有在定义的是加上inline才是内联函数而只是在申明的时候加inline而定义的时候没有加inline就不是内联函数
overbai 2008-11-14
  • 打赏
  • 举报
回复
只有在定义的是加上inline才是内联函数而只是在申明的时候加inline而定义的时候没有加inline就不是内联函数
要把所有.cpp文件扫描一下,找内联函数,提出来,然后在使用的地方做替换)。

如果在.h中定义的话,就可以简单很多

学习了!
Longinc 2008-11-14
  • 打赏
  • 举报
回复
学习
小人物- 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyu637 的回复:]
内联函数就是把函数在调用的地方,用代码展开的形式,避免函数调用的消耗。


这样就会有一个问题,一个函数一般都是在好几个文件中被调用,c++采用的编译方式是将。h文件附加到.cpp之前编译的,如果放在.cpp文件中,就会加大
编译器的工作量和编写复杂度,(要把所有.cpp文件扫描一下,找内联函数,提出来,然后在使用的地方做替换)。

如果在.h中定义的话,就可以简单很多
[/Quote]
mark
yshuise 2008-11-14
  • 打赏
  • 举报
回复
内联实际上是对代码的优化。不仅是书上写的那些知识,还是要实践出真知啊。
inline max(){
s::max(); //如果这个s::max只是一个声明,不是内联,也就是在其他的头文件,和他的实现分开了,那么是链接不过的。
}
nickshen_qidian 2008-11-14
  • 打赏
  • 举报
回复
关于定义在哪里,其实都可以。inline 函数对编译器而言必须是可见的以便它能够在调用点内联展开该函数。

另外inline(内联)函数给出了一种解决方案。若一个函数被指定为inline 函数则它将在程
序中每个调用点上被内联地展开。
例如
inline int min( int v1, int v2 )
{
return( v1 < v2 << v1 : v2 );
}
int minVal2 = min( i, j );
在编译时被展开为
int minVal2 = i < j << i : j;

但是,注意inline指示对编译器来说只是一个建议。编译器可以选择忽略该建议,因为
把一个函数声明为inline函数,并不见得真的适合在调用点上展开。例如一个递归函数
并不能在调用点完全展开虽然它的第一个调用可以一个1200 行的函数也不太可能在调
用点展开。
一般地inline 机制用来优化小的,只有几行的,经常被调用的函数。
在抽象数据类的设计中它对支持信息隐藏起着主要作用。
yshuise 2008-11-14
  • 打赏
  • 举报
回复
内联才不仅是减少函数调用开销。
for循环也可以内联。有些500,600百行的也可以内联。

65,211

社区成员

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

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