std :: string / reference counting / const

时间:2014-08-08 12:41:34

标签: c++ string

据我所知std :: string可以引用计数与否。我会说引用计数字符串有更好的性能? 所以我的问题是,制作std :: string const 是一种很好的编码风格吗?例如,局部变量或函数参数。我喜欢它,因为如果您知道某个变量是否可以更改,则更容易阅读代码。

据我所知,如果复制了变量,则会复制const字符串的值。还是我错了?我会说引用计数器不能改变,因为它是const?

2 个答案:

答案 0 :(得分:1)

  

据我所知,如果复制了变量,则会复制const字符串的值。还是我错了?我会说参考计数器不能改变,因为它是常量?

你错了。通常,引用计数为mutable

您的实现是否具有引用计数std::string不应影响您是否使变量成为常量。

答案 1 :(得分:0)

据我所知,最新的std :: string实现使用小字符串优化(SSO)而不是引用计数(因为需要锁定,因为多核系统上存在一些性能警告)。 SSO包含一个用于小字符串的自动固定大小的数组(例如,8个字符左右);所以,如果你的字符串很小,就不需要在堆上分配,释放内存。

SSO的问题在于,如果字符串很小(因为必须复制整个固定大小的数组),将字符串移动(使用移动语义)到另一个字符串的性能并不比复制它好。

因此,尽可能使用const引用或rvalue引用,并避免使用pass-by-value。