首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++很奇怪的有关问题,请各位指教!

2012-03-16 
c++很奇怪的问题,请各位指教!!////内联性能测试//

c++很奇怪的问题,请各位指教!!
//=======================================  
//内联性能测试  
//=========================================  
#include   <iostream>  
#include   <ctime>  
using   namespace   std;  
//------------------------------------------  
int   calc1   (int   a,   int   b)  
{  
return   a+b;  
}  
//------------------------------------------  
inline   int   calc2   (int   a,   int   b)  
{  
return   a+b;  
}  
//-----------------------------------------  
int   main()  
{  
int   x[300],   y[300],   z[300];  
clock_t   t   =   clock();  
for(int   i=0;   i <300;   ++i)  
for(int   j=0;   j <300;   ++j)  
for(int   k=0;   k <300;   ++k)  
z[i]   =   calc1(x[j],   y[k]);  
cout   < <   "Not   using   inline: "   < <   (clock()-t)/CLK_TCK   < <   "seconds "   < <   endl;  

t   =   clock();  
for(int   i=0;   i <300;   ++i)//第25行  
for(int   j=0;   j <300;   ++j)  
for(int   k=0;   k <300;   ++k)  
z[i]   =   calc2(x[j],   y[k]);  
cout   < <   "Using   inline: "   < <   (clock()-t)/CLK_TCK   < <   "seconds "   < <   endl;  

return   0;  
}  
//===============================================================  

错误提示:  
第25行处,i重复定义   ,第26,27行的j,k没有提示出错呢,只有i提示重复定义
请问是什么原因?是编译器的问题吗?vc6


[解决办法]
VC6啊,换VC7以上或者devcpp。
[解决办法]
在VS2005下没问题呀,
Not using inline:2seconds
Using inline:2seconds
[解决办法]
vc6是这样解释的
int i=0;
for(; i <300; ++i)
{
int j=0;
for(; j <300; ++j)
{
int k=0;
for(; k <300; ++k)
z[i] = calc1(x[j], y[k]);
}
}
[解决办法]
因为j,k是在i的循环里面,所以不会出错
[解决办法]
i当然出现了重复定义,而j和k由于作用域的问题不会产生重复定义
其他的编译器就不知道了
[解决办法]
这个是VC6编译器的问题,按照标准,这样是可以的

没有办法,你用VC6,就得稍微向它妥协
[解决办法]
vc6不够标准,标准要求for里面的变量在for结束后作用域就结束了。vc6认为仍然可见的

[解决办法]
内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。以下情况不宜使用内联:
(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。

[解决办法]
我在vc7.0中运行的时候没有错误,可能就是6.0的问题

--------------------
Vc7中有编译选项的,你打开的话结果与6中一样。
------解决方案--------------------


钱能的书,你就别太当真了。
看:
effective c++ item 33
more execptional c++ item 12
execptional c++ style item 25

热点排行