我想要另一个条件 - 仍然保持快速执行时间但更安全 - 如果其中一个或两个字符串为空,我返回false:
int speicial_strcmp(char *str1, char* str2 )
{
if(*str1==*str2 =='\0')
return 0;
return strcmp(str1,str2);
}
Run Code Online (Sandbox Code Playgroud)
jal*_*alf 12
不,这不是一个好方法,因为它不起作用.
if(*str1==*str2 =='\0')
Run Code Online (Sandbox Code Playgroud)
将被评估为:
bool tmp1 = *str1==*str2;
bool tmp2 = tmp1 == '\0';
if (tmp2)
Run Code Online (Sandbox Code Playgroud)
换句话说,因为bool将被提升为一个整数,只要字符串以不同的字符开头,你的测试就会返回true(tmp1将为false,将转换为0,因此tmp2变为true)
不要试图超越编译器.编写快速代码不是为了编写尽可能少的代码行,甚至是尽可能短的代码行.即使==以这种方式链接在一起是有意义的,也没有理由为什么它会更快.只需编写您理解的代码,并且可以正确编写.
| 归档时间: |
|
| 查看次数: |
2285 次 |
| 最近记录: |