【发布时间】:2014-08-08 12:41:33
【问题描述】:
据我所知,std::string 可以被引用计数,也可以不被引用。我会说引用计数字符串有更好的性能? 所以我的问题是,将 std::string 设为 const 是否是一种好的编码风格?例如,局部变量或函数参数。我喜欢它,因为如果您知道变量是否要被更改,则更容易阅读代码。
据我了解,如果复制变量,则复制 const 字符串的值。还是我错了?我会说引用计数器不能更改,因为它是 const?
【问题讨论】:
-
"我会说引用计数字符串有更好的性能?" - 这完全取决于你对他们做什么。请注意,由于 C++11,它们不能合法地被引用计数,尽管一些实现仍然是。
-
"我会说引用计数器可以更改,因为它是常量?" - 假设你的意思是“不能”,那宁愿打败引用计数点。据推测,即使在
const字符串中它也是可变的(这是合理的,因为它不是可见状态的一部分);但是您必须咨询特定的实现才能了解实际发生的情况。 -
常量正确性总是一件好事,直到它不是。
-
将字符串作为 const 引用传递给函数将保存一个副本。按 const 值不会。
-
as far as I know std::string can be reference counted or notstd::string 在 C++11 中不能被引用计数。例如,必须有一个iterator begin() noexcept;成员,这意味着它不能重新分配存储(并且既不会抛出异常也不会返回无效的迭代器),这意味着它不能在写入时被引用/复制。此外,根据 §21.4.1.6 N3337,在调用begin时它不能使自己的存储无效。另见open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html