兄确实是个高手,能想到if(str || 0 == str[0])的写法。
我以前还喜欢这么写,后来看了一本国外的书,不记得是不是经典的<<c program language>>, 书上说指针访问的效率要高一些,原理是:
char test[1024];
指针访问:
char * lpcSource = test;
for( int i = 0; i < sizeof( test ); i++ ) {
*lpcSource++ = 0;
}
每一次访问是*lpcSource++ = *(lpcSource+1) = *( (char * )lpcSource + 1)。
数组下标访问:
for( int i = 0; i < sizeof( test ); i++) {
test[ i ] = 0;
}
每一次访问是test[ i ] = *(test + i ) = *( (char * )lpcSource + i * 1).
数组下表访问有乘法运算,而指针访问是没有的,大家知道:加减运算天生第一,乘除法运算比加减
慢很多,懂汇编的人应该比我清楚。
当然我也没有用gcc来生成汇编代码来细细比较了,因为对于“判断字符串是否为空”这个问题,我们
检查的是第一位,两者之间的效率差别应该很微小到不用考虑吧。
其实,if(str || 0 == str[0])要比if ( lpcSource && '\0' == *lpcSource )可读性高一点,因为我们对数组一看就
明白,就算是刚学C语言的人。
最后,有位仁兄说“if(""==str) {}不可以吗? 为何如此复杂 ”----这里不是java哦。