社区
C++ 语言
帖子详情
关于内联函数的定义问题
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百行的也可以内联。
【C++】C++
内联函数
定义
在头文件中的
问题
详解
pragma once // 或 #ifndef 保护// 方法1:使用inline关键字// 方法2:类内
定义
的成员函数隐式inlinepublic:int add(int a, int b) { // 隐式inline// 声明// 类外
定义
也需要inline始终将
内联函数
定义
在头文件中确保ODR一致性:整个程序中
内联函数
必须只有一份
定义
合理使用内联:只对小函数使用内联(通常3-10行)使用#pragma once或头文件保护:防止多重包含。
C++
内联函数
定义
在头文件中的
问题
详解
本文详细解析了C++
内联函数
定义
在头文件中的相关
问题
。主要内容包括:
内联函数
必须在使用它的每个编译单元可见的基本要求,常见错误做法及其导致的链接错误和ODR违反
问题
。文章提供了标准实践方法(
内联函数
定义
在头文件中)、特殊场景处理方案以及现代C++改进(如C++17的inline变量和C++20的consteval)。最后总结了最佳实践,包括保持ODR一致性、合理使用内联、使用头文件保护等,并介绍了相关诊断工具。这些指导原则有助于编写健壮高效的C++代码。
内联函数
定义
相关
问题
内联函数
一般应将声明和
定义
放在头文件中; 若函数的声明和
定义
分别在两个文件中,则该函数不要
定义
成
内联函数
inline
内联函数
可以避免函数重
定义
问题
在.h中
定义
了和main函数中一样的函数,在返回值前面添加修饰关键字inline即可. .h中的生命和.cpp中的实现 1 #if !defined(AFX_STDAFX_H__CF8E6B35_199B_45D0_9F2A_929A26911DD2__INCLUDED_) 2 #define AFX_STDAFX_H__CF8E6B35_199B_45D0_9F2A_92...
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章