如果s1
和s2
是字符串,那么(据我所知)
s1 = s2.substr();
表示与
完全相同s1 = s2;
为什么有人想在没有任何争论的情况下致电substr()
?
编辑:另一种表达同一问题的方法:
为什么标准定义substr
因此:
basic_string substr( size_type pos = 0,
size_type count = npos ) const;
而不是:
basic_string substr( size_type pos,
size_type count = npos ) const;
答案 0 :(得分:4)
答案是,只是为了它 正如您所注意到的那样,创建副本没有任何优势(有时速度不利)。
推测为什么第一个参数完全默认,我猜这是强制取消共享古代COW字符串的一种方式(当前标准不允许)。或者在添加默认参数时有人过于热心。它发生在我们最好的人身上。
答案 1 :(得分:2)
在某些情况下,substr()
的逻辑可能会更好。
想象一下,你有一个缓冲区作为字符串指针和指向某些字符串指标对象的指针。
if (metrics) {
substring = buffer->substr(metrics->pos(), metrics->len());
} else {
substring = buffer->substr();
}
读取优于
if (metrics) {
substring = buffer->substr(metrics->pos(), metrics->len());
} else {
substring = *buffer;
}