| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1918 人关注过本帖
标题:VC6.0对内联函数的支持情况如何?
只看楼主 加入收藏
jiaju111
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2007-3-27
收藏
 问题点数:0 回复次数:12 
VC6.0对内联函数的支持情况如何?
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);
}
}
大家帮我解释一下,谢谢
搜索更多相关主题的帖子: 内联 函数 
2007-05-22 22:48
kisscjy
Rank: 1
等 级:新手上路
帖 子:217
专家分:0
注 册:2007-4-9
收藏
得分:0 
你的内联函数有循环while 存在,

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

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

每当我一晚写下70,80个程序时,你还真以为,这都是我一个人干的.....不过说真的,其实都是抄书的~~ ^@^
2007-05-22 23:12
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
楼主这样的测试,有说服力吗?表示怀疑!

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

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

Fight  to win  or  die...
2007-05-22 23:31
kisscjy
Rank: 1
等 级:新手上路
帖 子:217
专家分:0
注 册:2007-4-9
收藏
得分:0 
呵呵,上网查的~~~~

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

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

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

每当我一晚写下70,80个程序时,你还真以为,这都是我一个人干的.....不过说真的,其实都是抄书的~~ ^@^
2007-05-23 00:15
jiaju111
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2007-3-27
收藏
得分:0 
以下是引用kisscjy在2007-5-22 23:12:34的发言:
你的内联函数有循环while 存在,

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

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

那指的是内联函数本身包含循环或递归的时候大部分编译器都不支持

我的循环是在外面,应该不影响吧?

那3楼的说说应该怎么测试啊?


Everything is gonna be okay!
2007-05-23 11:02
leilinghua
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-25
收藏
得分:0 
inline指示对编译器来说只是一个建议,编译器可以选择忽略该建议,一般内联机制用来优化小的经常被调用的函数,很显然你的while循环没有以内联的形式表用函数了

潜心学习。。。。。 Q群:C&&C++ Lovers 39951868
2007-05-23 12:27
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

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

图片附件: 游客没有浏览图片的权限,请 登录注册




Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-05-23 13:29
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
yuyunliuhen


怎么我发不起新贴啊?

Fight  to win  or  die...
2007-05-23 13:31
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册



---Thinking in C++, 2nd edition, Volume 1 Revision_resouce---



Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-05-23 13:34
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
和偶上次情况一样吧,上次是回复都不行,你把杀毒软件暂时关闭了,或者把缓存清理一下试试。。。

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-05-23 13:37
快速回复:VC6.0对内联函数的支持情况如何?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016688 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved