两个函数的区别

collegeml 2008-04-03 08:57:22

bool operator==( const String &str1, const String &str2 )
{
if ( str1._size != str2._size )
return false;
return strcmp( str1._string, str2._string ) ? false : true;
}
inline bool operator==( const String &str, const char *s )
{
return strcmp( str._string, s ) ? false : true;
}


为什么第一个要比较他们的长度,而第二个不需要呢?
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
andywiliang 2008-04-05
  • 打赏
  • 举报
回复




请高手坐阵本群管理员
C C++ C# JAVA编程交流群:11713348
momentt 2008-04-05
  • 打赏
  • 举报
回复
bool operator==( const String &str1, const String &str2 )
{
if ( str1._size != str2._size )
return false;
return strcmp( str1._string, str2._string ) ? false : true;
}
这一个,我的解释是这样的,该函数的型参是引用类型,而在传递参数的时候,引用类型的字符串会转化为这个形式:
const str1[str.size],如果两个字符串长度不一样的话,就不是同一个类型。所以首先判断两个字符串的长度。

inline bool operator==( const String &str, const char *s )
{
return strcmp( str._string, s ) ? false : true;
}
这一个首先把字符串对象转化为c语言的字符数组,而两个字符数组比较是会发生这样的转化:把数组转化为指针,所以不需要比较长度。
jinwei1984 2008-04-04
  • 打赏
  • 举报
回复
速度原因

string类字符串 有记录串长的成员吧

只需O(1)
hellodudu 2008-04-03
  • 打赏
  • 举报
回复
怎么求char*s的size呢?
sizeof(s)? 结果只能是4
zz76073424 2008-04-03
  • 打赏
  • 举报
回复
bool operator==( const String &str1, const String &str2 )

inline bool operator==( const String &str, const char *s )

会不会和string与char的结束符有关?
xiaofang3100 2008-04-03
  • 打赏
  • 举报
回复
可能是运行的速度问题吧,呵呵
CodeSpy 2008-04-03
  • 打赏
  • 举报
回复
从性能角度考虑,第一个需要比较长度,而第二个要比较长度的话就要即时计算const char* s的长度。第二个在计算完长度后,也许还要继续执行下一条比较语句。。。。。

64,637

社区成员

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

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