std :: string的默认容量?

voi*_*ter 8 c++ string std stdstring dynamic-memory-allocation

当我std::string使用默认构造函数创建一个时,是否在堆上分配了任何内存?我希望答案不依赖于实施,并且是标准化的.考虑以下:

std::string myString;
Run Code Online (Sandbox Code Playgroud)

pmr*_*pmr 8

不幸的是,根据N3290,答案是否定的.

表63第643页说:

  • data() 一个非空指针,可以复制,并且可以添加0
  • size() 0
  • capacity() 一个未指定的值

该表与C++ 03完全相同.


Jer*_*fin 5

不,但是,我不知道默认情况下会在堆上分配内存的任何实现。然而,相当多的包括所谓的短字符串优化 (SSO),它们在其中分配一些空间作为字符串对象本身的一部分,因此只要您不需要超过该长度(似乎在 10和 20 个字符作为规则)它可以完全避免进行单独的堆分配。

但这也不是标准化的。