找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1125|回复: 9

VC6.0对内联函数的支持情况如何?

[复制链接]
发表于 2009-11-6 01:28:10 | 显示全部楼层 |阅读模式 IP:江苏扬州
VC6.0对内联函数的支持情况如何?
为什么我写了个执行5000000次的程序
使用内联和不使用内联(把inline去掉)时间效率一样
程序如下:
#include<iostream>
#include<string>
using namespace std;
inline const string shorter(const string s1,const string s2)
{
return s1.size()<s2.size()?s1:s2;
}
void main()
{
string str1("china"),str2("english");
long i=5000000;
while(--i)
{
shorter(str1,str2);
}
}
大家帮我解释一下,谢谢
发表于 2009-11-6 01:28:11 | 显示全部楼层 IP:江苏扬州
你的内联函数有循环while 存在,

这时编译器会拒绝对这条函数实现内联~~

而是转为普通的函数调用~~
回复

使用道具 举报

发表于 2009-11-6 01:28:12 | 显示全部楼层 IP:江苏扬州
楼主这样的测试,有说服力吗?表示怀疑!

楼上的说法倒是第一次听说。

估计跟编译器行为有关吧!
关注。
回复

使用道具 举报

发表于 2009-11-6 01:28:13 | 显示全部楼层 IP:江苏扬州
呵呵,上网查的~~~~

(仅仅是听说而已,不知道对不对)

听说inline的实现权在编译器,并不由程序员全权决定,

该关键字只代表程序员的建议,对编译器没有强制约力。
回复

使用道具 举报

发表于 2009-11-6 01:28:14 | 显示全部楼层 IP:江苏扬州
以下是引用kisscjy在2007-5-22 23:12:34的发言:
你的内联函数有循环while 存在,

这时编译器会拒绝对这条函数实现内联~~

而是转为普通的函数调用~~
那指的是内联函数本身包含循环或递归的时候大部分编译器都不支持

我的循环是在外面,应该不影响吧?
那3楼的说说应该怎么测试啊?
回复

使用道具 举报

发表于 2009-11-6 01:28:15 | 显示全部楼层 IP:江苏扬州
inline指示对编译器来说只是一个建议,编译器可以选择忽略该建议,一般内联机制用来优化小的经常被调用的函数,很显然你的while循环没有以内联的形式表用函数了
回复

使用道具 举报

发表于 2009-11-6 01:28:17 | 显示全部楼层 IP:江苏扬州
了解内联作用就行了,内联的初衷是代替宏,我们几乎不使用宏,只使用内联函数。在类里面定义的函数将自动成为内联函数,也可以加上inline 关键字,通常函数体和声明结合在一起,否则内联将会失效,编译器将它作为普通函数对待。如
inline int pulsone(int x){return x++;}
一般把内联定义在头文件中,当编译器看到定义时,它把函数名和函数体放在符号表里。当使用函数时,编译器检查以确保调用的是正确的且返回值正确使用,然后函数替换函数体,消除了开销,但代价是占用更多内存,
我觉得LZ 的代码并不能证明什么.时间效率方面,LZ可有用专门的测试工具测试过,以我们的感觉是感觉不出来的,毕竟效率方面是需要很精确的。(个人看法而已)
关于内联和编译器,楼主可看看下面的,在哪些情况下内联会失效。。。。





附件: 只有本站会员才能下载或查看附件,请您 登录 或 注册
回复

使用道具 举报

发表于 2009-11-6 01:28:18 | 显示全部楼层 IP:江苏扬州
yuyunliuhen


怎么我发不起新贴啊?
回复

使用道具 举报

发表于 2009-11-6 01:28:19 | 显示全部楼层 IP:江苏扬州
---Thinking in C++, 2nd edition, Volume 1 Revision_resouce---


附件: 只有本站会员才能下载或查看附件,请您 登录 或 注册
回复

使用道具 举报

发表于 2009-11-6 01:28:21 | 显示全部楼层 IP:江苏扬州
和偶上次情况一样吧,上次是回复都不行,你把杀毒软件暂时关闭了,或者把缓存清理一下试试。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 17:26 , Processed in 0.141209 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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