社区
C++ 语言
帖子详情
#define 和 inline 有什么不同
kim_jinye
2009-08-06 06:49:39
#define ABC(x) (x*x)
inline int abc(const int x) {return (x*x);}
请问大家ABC和abc什么时候执行结果不同?
...全文
320
26
打赏
收藏
#define 和 inline 有什么不同
#define ABC(x) (x*x) inline int abc(const int x) {return (x*x);} 请问大家ABC和abc什么时候执行结果不同?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fengjieBKB
2011-09-23
打赏
举报
回复
今天笔试题是这个,一大片的空白~~
kim_jinye
2009-08-07
打赏
举报
回复
我问的是执行结果什么时候不同
woodstone121
2009-08-07
打赏
举报
回复
大家 说的很全了啊
mu_yang
2009-08-07
打赏
举报
回复
[Quote=引用 20 楼 yshuise 的回复:]
引用 17 楼 mu_yang 的回复:
引用 16 楼 yshuise 的回复:
引用 15 楼 mu_yang 的回复:
补充
#define 是必然替换的
inline 可能替换也可能不替换,看编译器心情
所以inline对于初学者没什么意义
你书上的知识应该改改了。书上对于inline 的论述是落后了。
你的依据?
测试。
[/Quote]
测试条件?测试环境?
测试数据?
你是否把所有的编译器在所有的环境下都测试过?
即使你都测过
也没理由说“你书上的知识应该改改了。书上对于inline 的论述是落后了。”这句话吧
carylucky
2009-08-07
打赏
举报
回复
inline类似函数体替换,对类型进行检查,就是一个函数而已吧
mu_yang
2009-08-07
打赏
举报
回复
[Quote=引用 20 楼 yshuise 的回复:]
引用 17 楼 mu_yang 的回复:
引用 16 楼 yshuise 的回复:
引用 15 楼 mu_yang 的回复:
补充
#define 是必然替换的
inline 可能替换也可能不替换,看编译器心情
所以inline对于初学者没什么意义
你书上的知识应该改改了。书上对于inline 的论述是落后了。
你的依据?
测试。
[/Quote]
荒谬!
yshuise
2009-08-07
打赏
举报
回复
[Quote=引用 17 楼 mu_yang 的回复:]
引用 16 楼 yshuise 的回复:
引用 15 楼 mu_yang 的回复:
补充
#define 是必然替换的
inline 可能替换也可能不替换,看编译器心情
所以inline对于初学者没什么意义
你书上的知识应该改改了。书上对于inline 的论述是落后了。
你的依据?
[/Quote]
测试。
mu_yang
2009-08-07
打赏
举报
回复
[Quote=引用 18 楼 morilasi 的回复:]
inline好像确实是不一定替换。inline只是建议编译器替换
[/Quote]
看来会看书的还有
morilasi
2009-08-07
打赏
举报
回复
inline好像确实是不一定替换。inline只是建议编译器替换
mu_yang
2009-08-07
打赏
举报
回复
[Quote=引用 16 楼 yshuise 的回复:]
引用 15 楼 mu_yang 的回复:
补充
#define 是必然替换的
inline 可能替换也可能不替换,看编译器心情
所以inline对于初学者没什么意义
你书上的知识应该改改了。书上对于inline 的论述是落后了。
[/Quote]
你的依据?
yshuise
2009-08-07
打赏
举报
回复
[Quote=引用 15 楼 mu_yang 的回复:]
补充
#define 是必然替换的
inline 可能替换也可能不替换,看编译器心情
所以inline对于初学者没什么意义
[/Quote]
你书上的知识应该改改了。书上对于inline 的论述是落后了。
mu_yang
2009-08-07
打赏
举报
回复
补充
#define 是必然替换的
inline 可能替换也可能不替换,看编译器心情
所以inline对于初学者没什么意义
morilasi
2009-08-07
打赏
举报
回复
如果你的书上没讲这个问题,把这本书扔了重买本
yshuise
2009-08-07
打赏
举报
回复
并不运行这段代码
yshuise
2009-08-07
打赏
举报
回复
#define 等元编程 方式最大的缺点就是无法调试。
这样学习起来很复杂。比如元编程,因为模板支持一种方式:SFINAE
这更加大了学习的困难,跟踪了很久的代码源码,原来是错误的。模板并不掉这段代码。
yshuise
2009-08-07
打赏
举报
回复
#define 替换,在编译时期的替换。
优点就是可以在作为“代码生成器”来使用。比如MFC,以及Boost::Preprocessor,
生成c++/c的代码效率很高,免去了很多的重复代码。
inline 最大的优点就是对for循环之类的进行优化。
他们的差距其实很多。主要就是看使用的方式了。
ervinsas
2009-08-06
打赏
举报
回复
这两行功能上一样,但区别在于:
define只是做简单替换,根本没有任何语法错误等检查。
而
inline会有类型,语法等安全检查。
拉卡尼休
2009-08-06
打赏
举报
回复
大家都说区别了,没人回答什么时候调用结果不同,我给补充一下
类似于这样的调用ABC(1+1)跟abc(1+1);结果不一样
ABC(1+1)展开是1+1*1+1=3
abc(1+1)返回2*2=4
飞天御剑流
2009-08-06
打赏
举报
回复
[Quote=引用楼主 kim_jinye 的回复:]
#define ABC(x) (x*x)
inline int abc(const int x) {return (x*x);}
请问大家ABC和abc什么时候执行结果不同?
[/Quote]
区别主要是三点:
一、类函数宏的参数只是替换,内联函数的参数有完全求值过程;
二、类函数宏的参数没有类型提升或者转换,而内联函数的参数有类型提升或转换;
三、类函数宏没有类型检查,内联函数有。
yangyunzhao
2009-08-06
打赏
举报
回复
区别大了
加载更多回复(6)
#
define
和
inline
的区别
特性差异 对于两者的区别涉及到c与c++语言两者的差异性。 C++有着更加严格编译系统,这使得C++程序的...为了替代
define
功能成为真正出函数,调用时有严格的参数检测;它也可作为类的成员函数,保存在预编译器的符号表中
#
define
与
inline
的区别
一、
inline
相关内容转载于 作者:机器人小雪 链接:https://www.jianshu.com/p/8546f48a4a7b 来源:简书 __
inline
__ __attribute__((always_
inline
)) 的意思是强制内联.所有加 __
inline
__ __attribute__((always...
#
define
和
inline
的区别
#
define
和
inline
的区别
define
:定义预编译时处理的宏; 只进行简单的字符替换,无类型检测 typedef:定义类型别名 用于处理复杂类型 例: typedef int A; 则:A a; //定义a为int
inline
: 内联...
尽量使用const、enum、
inline
来替换#
define
尽量使用const、enum、
inline
来替换#
define
前言一、const替代#
define
二、enum替代#
define
三、
inline
替代#
define
总结 前言 因为“#
define
”并不是语言的一部分,所以在一些情况下,“#
define
”并不是一个最佳的...
内联
inline
与 宏#
define
1:
inline
是C++的特性,#
define
是C,C++的共用的特性 2:
inline
代码的原始实现是#
define
,也就是说
inline
修饰的函数,不是函数的调用,而是函数的替换。 3:举例
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章