我突然想到std::string
,substr
当它可以从*this
.
N3225 的标准库包含以下成员函数声明std::string
basic_string substr(size_type pos = 0, size_type n = npos) const;
可以实现为右值优化的实现是否可以substr
重载并提供两个版本,其中一个可以为右值字符串重用缓冲区?
basic_string substr(size_type pos = 0) &&;
basic_string substr(size_type pos, size_type n) const;
我想右值版本可以按如下方式实现,*this
将设置的内存重用*this
到移动状态。
basic_string substr(size_type pos = 0) && {
basic_string __r;
__r.__internal_share_buf(pos, __start + pos, __size - pos);
__start = 0; // or whatever the 'empty' state is
return __r;
}
这在常见的字符串实现上是否以有效的方式工作,还是需要太多的内务处理?