============================【2012.10.10】=================================
代码举例如下:
void main() { double duration = 0.; clock_t start=clock(); char a[] = "hello"; for (int i=0; i<10000; i++) { std::cout<<a; } duration = (double)(clock() - start) / CLOCKS_PER_SEC; printf( "%average %2.1f FPS\n", i/duration ); }运行结果显示:
也就是说,每次输出一个简单的长度为5的字符串,需要时间约为0.5ms。那么,如果不输出,而是简单的字符串赋值,结果怎样呢?
void main() { double duration = 0.; char* a; clock_t start=clock(); for (int i=0; i<100000000; i++) { a = "hello"; } duration = (double)(clock() - start)/CLOCKS_PER_SEC ; printf( "%average %2.1f FPS\n", duration ); }这一次结果为:
注意,由于简单的赋值运算实在是快,只好将for循环次数变为1亿次,但是可以看到,所使用时间依然为0.
那么如果在循环内做个很简单的运算呢?
void main() { double duration = 0.; char a[2]; clock_t start=clock(); for (int i=0; i<100000000; i++) { a[i%2]='f'; } duration = (double)(clock() - start)/CLOCKS_PER_SEC ; printf( "%average %2.3fs \n", duration ); }结果为:
再进一步,如果调用函数呢?
void disp() { for (int i=0; i<2; i++) { ; } } void main() { double duration = 0.; clock_t start=clock(); for (int i=0; i<50000000; i++) { disp(); } duration = (double)(clock() - start)/CLOCKS_PER_SEC ; printf( "%average %2.3fs \n", duration ); }
void main() { double duration = 0.; clock_t start=clock(); for (int i=0; i<1000000; i++) { int *p = new int[257]; delete[] p; } duration = (double)(clock() - start)/CLOCKS_PER_SEC ; printf( "%average %2.3fs \n", duration ); }结果为:
============================【2012.10.08】=================================
转自:http://www.cnblogs.com/joeblackzqq/archive/2011/01/28/1947275.html
今天编译Relese版本项目是遇到【LINK : warning LNK4089: all references to "GDI32.dll" discarded by /OPT:REF】
这种警告解决办法:
1.Project--Setting--Link 选项卡,在Project Options 处添加 /opt:noref
2.Project--Setting--Link 选项卡,在Project Options 处添加 /IGNORE:4089
3.在程序中添加 #pragma warning(disable:4089)
注意:因为使用【/IGNORE:4089】生成的文件大小比【/opt:noref】小,个人推荐使用【/IGNORE:4089】在网上找到一些原因如下:
这个警告只是简单的意味你错误的连接一个库(library),编译器查到你并没有使用其中的函数.这个警告在你做发布版(release builds)的时候是很平常的,因为/OPT:REF的连接器选项在发布版本(release builds)被设置成为命令连接器修正你的最终代码尽可能的避免连接无用的dlls.(这使得可执行代码的import地址表尽量的小).
============================【2012.09.11】=================================
在同一个cpp文件中,为了突出main函数,或者其他原因,要把后来定义的某个变量提前使用,这就需要在本文件前面提前声明,如下式声明一个字符串数组,类似于带参数main函数中的argv变量。
声明:
extern const char* a[];
const char **b = a;
//。。。中间省略的很多代码
//文件的后面部分,变量的定义:
static const char* a[] = {"aa","bb","cc",0};
分析:变量a的声明处加了一个extern,这样编译器编译到这一行代码,就知道变量a是后来定义的,
而a的定义处前面加了static是为了防止其他程序使用,使a仅限于本文件使用。注意,在定义a时不管是否加了static,在提前使用声明时都不能加static,而是只能加extern 以及变量的类型,const是可以加的。
============================【2012.09.08】=================================
标题:关于操作符重载
C++ 的类中涉及到运算符重载的情况,规则为:将双目运算符函数重载为友元函数,将单目运算符函数重载为类的成员函数。
注:双目运算符:'+'、'-'、'*'、'/';单目运算符:'++'、'--'。
============================【2012.06】====================================
针对代码进行错误分析:
int WriteImgInfo(const char* filename,IplImage* Img); { FILE* stream = fopen(filename,"w"); return 1; }错误提示:
error C2447: missing function header (old-style formal list?)
错误分析:
函数定义时,首行多加了分号,去掉在第一行末尾的分号即可。