<>有个地方没看明白,请指点

ttwy 2002-10-25 10:34:00
110页定义了两个重载的等于操作符,分别是:
inline bool String :: operator == ( const String &rhs )
{
if ( _size != rhs._size )
return false;
return strcmp ( _string, rhs._string ) ? false : true;
}

inline bool String :: operator == ( const char *s )
{
return strcmp ( _string, s );
}


我不明白第一个为什么加上if条件判断,是出于效率考虑吗?
那第二个为什么不是这样写:
inline bool String :: operator == ( const char *s )
{
if ( _size != strlen ( s ) )
return false;
return strcmp ( _string, s );
}

或者第一个去掉if条件判断,别的书上就没有。到底怎么回事呢???
...全文
28 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttwy 2002-10-27
  • 打赏
  • 举报
回复
to kxw(时光):这个string可不是标准库的,否则何必重载==

原来真的是出于效率考虑,看来这本书的代码很严谨啊,谢谢!!
vanhui 2002-10-26
  • 打赏
  • 举报
回复
应该是出于效率的考虑,都说效率优先嘛
kxw 2002-10-26
  • 打赏
  • 举报
回复
因为有char*到string接受隐式转换,而从string到char*必须有一个c_str()。

lufly2000 2002-10-26
  • 打赏
  • 举报
回复
我认为:
在第一个等于操作符中,是两个string对象相比,因为string都有size数据成员,所以可以先比较size,如果size不想等,那么两个字符串当然是不相等的,如果size相等再比较字符,确实是为了提高效率.

在第二个等于操作符中,是和一个字符串指针相比,因为它没有size,所以只能直接比较

你写的降低了效率,不如直接用函数比较

请指教。。。
efstudent 2002-10-26
  • 打赏
  • 举报
回复
同意 Maxwell(不可知)
caizzrr 2002-10-25
  • 打赏
  • 举报
回复
同意 Maxwell(不可知)
mrbeaver 2002-10-25
  • 打赏
  • 举报
回复
考虑效率,因为随机给出两个字符串,长度不等的概率要大的多
故大多数情况可不进行比较
学习万物互联 2002-10-25
  • 打赏
  • 举报
回复
inline bool String :: operator == ( const char *s )
{
return strcmp ( _string, s );
}

这个你不知道s的长度的,加长度判断没有必要。
上一个,知道长度,如果长度不等,那显然不等罗。。
Maxwell 2002-10-25
  • 打赏
  • 举报
回复
因为_size记录了字符串的长度,这样效率可能会好一些,而char *的那个,
size需要计算,就不合算了。我是这么想的。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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