为什么不使用参数调用basic_string :: substr?

时间:2014-06-26 13:04:07

标签: c++ stdstring

如果s1s2是字符串,那么(据我所知)

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;

2 个答案:

答案 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;
}