35

将 gcc 4 与or一起使用时是否std::string计入引用?-std=c++0x-std=c++11

4

3 回答 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 回答