你认为下面的代码段哪个的效率会更高一些??

fcf128 2004-10-04 12:52:38
你认为下面的代码段哪个的效率会更高一些??

void SS( CString &info )
{
char t[6]={0} ;

for( int i=0 ; i<6 && (t[i]=info[i]) ; i++) ;

// ...
}


上面的for语句和下面这句哪个效率会更高一些?请说明理由。。

for( int i=0 ; i<6 ; i++) t[i]=info[i];


或者你有更好的更有效率的做法?请给出..
...全文
174 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcf128 2004-10-05
  • 打赏
  • 举报
回复
呵呵,漏了点东西

inline bool AA( const char &a ) const
{
return isalnum(a) || a='@' ; // 这个能通过编译?
}

fcf128 2004-10-05
  • 打赏
  • 举报
回复
谢谢 bluejugar(我爱小艳)
双杯献酒 2004-10-04
  • 打赏
  • 举报
回复
void SS( CString &info )
{
char t[6]={0} ;
for( int i=0 ; i<6 && (t[i]=info[i]) ; i++) ;
// ...
}
应该将 char t[6] = {0};
修改成 TCHAR t[6];
(1) "= {0}" 没有必要,浪费CPU
(2)char在UNICODE下会出错。
双杯献酒 2004-10-04
  • 打赏
  • 举报
回复

inline AA( const char &a ) const
{
return isalnum(a) || a='@' ; // 这个能通过编译?
}

bluejugar 2004-10-04
  • 打赏
  • 举报
回复
"你认为下面的代码段哪个的效率会更高一些??

void SS( CString &info )
{
char t[6]={0} ;

for( int i=0 ; i<6 && (t[i]=info[i]) ; i++) ;

// ...
}


上面的for语句和下面这句哪个效率会更高一些?请说明理由。。

for( int i=0 ; i<6 ; i++) t[i]=info[i];"

这两者的效率是大不一样的.你可以注意到,"for( int i=0 ; i<6 && (t[i]=info[i]) ; i++) ;"比"for( int i=0 ; i<6 ; i++) t[i]=info[i];"多了一个"&&"操作,所以.....
而这是没有必要的,你可以用写成:
for( int i=0 ; t[i]=info[i], i<6 ; i++);
这样二者就真正等效了.

fcf128 2004-10-04
  • 打赏
  • 举报
回复
当然应该考虑到 生成的代码
fcf128 2004-10-04
  • 打赏
  • 举报
回复
const char a ; // char == 1byte
const char &a; // char &==4byte

实现能达到同样的效率?
Dong 2004-10-04
  • 打赏
  • 举报
回复
对于第一个问题(for)有没有更高效的办法??
----------------------------------------------
应该没有了!不过如果你的程序很大的话,结构和调用处理是效率就提高了。没有必要在这些本来很高效的地方钻牛角尖!
Dong 2004-10-04
  • 打赏
  • 举报
回复
还是一样,
本来const char a需要对临时变量a复制,但因为是inline(内联)的,所以函数压栈的开销就不存在的,所以就一样的了

不知楼主有什么想法??你觉得那个高呢?
fcf128 2004-10-04
  • 打赏
  • 举报
回复
对于第一个问题(for)有没有更高效的办法??
fcf128 2004-10-04
  • 打赏
  • 举报
回复
对于下面的两个呢?


inline AA( const char a ) const
{
return isalnum(a) || a='@' ;
}


inline AA( const char &a ) const
{
return isalnum(a) || a='@' ;
}


哪个效率会更高一些?请说明理由。。
Dong 2004-10-04
  • 打赏
  • 举报
回复
一样的,因为两条语句对t[i]=info[i];的执行顺序和次数都一样。而且开销都一样大!

都是先初始化i,判断i是否小于6,如果小于6,那么执行t[i]=info[i];,然后执行i++

其实表达不一样而已,但从执行命令和分配资源都一样的。

64,654

社区成员

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

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