将 gcc 4 与or一起使用时是否std::string
计入引用?-std=c++0x
-std=c++11
问问题
11161 次
3 回答
25
查看我发现的libstdc++ 文档(有关更多信息,请参阅链接):
一个字符串如下所示:
[_Rep]
_M_length
[basic_string<char>] _M_capacity
_M_dataplus _M_refcount
_M_p ----------------> unnamed array of char_type
所以,是的,它是参考计数的。另外,从这里的讨论:
是的,std::string 将在某些时候进行非引用计数,但由于非引用计数字符串在 C++98 中也是有效的,一种选择是切换到非引用计数字符串对于 -std=c++98 和 -std=c++11 模式。我不是说这会发生,但它可能会发生。
因此,似乎有计划将其更改为符合要求(但我不知道进展如何)。
更新
正如 emsr 在评论中指出的那样,目前有一个名为 的非引用计数扩展vstring.h
,似乎它没有被替换的唯一原因std::string
是因为 ABI 兼容性。这里有一个关于它的问题。
于 2012-09-20T20:43:50.593 回答
23
C++11 添加了禁止 std::string
被引用计数的特定语言。因此,如果是这样,那么它在 GCC 的 C++11 标准库中是一个非常重大的失败。
于 2012-09-20T20:20:22.853 回答
13
添加一些有用的信息来发布这个问题。
std::string
随着 GCC 5 的发布,将不再对引用计数,以解决此 C++11 要求。
来自https://gcc.gnu.org/gcc-5/changes.html
默认情况下启用 std::string 的新实现,使用小字符串优化而不是写时复制引用计数。
于 2015-03-05T06:09:38.773 回答