使用默认构造函数创建 std::string
时,是否会在堆上分配任何内存?我希望答案不依赖于实现,并且是标准化的。请考虑以下情况:
std::string myString;
使用默认构造函数创建 std::string
时,是否会在堆上分配任何内存?我希望答案不依赖于实现,并且是标准化的。请考虑以下情况:
std::string myString;
很遗憾,根据N3290的规定,答案是否定的。
第643页的第63个表格如下:
data()
非空指针,可复制并且可以将0添加到它中size()
为0capacity()
一个未指定的值C ++ 03的表格完全相同。
不,但我不知道任何默认在堆上分配内存的实现。然而,很多实现包括所谓的短字符串优化(SSO),他们在字符串对象本身分配一些空间,只要你不需要超过那个长度(通常在10到20个字符之间),就可以避免进行单独的堆分配。
不过这也没有标准化。
这取决于具体实现。一些字符串实现会为小型字符串分配少量的自动存储空间,而对于更大的字符串则会动态分配更多的存储空间。
这取决于编译器。在这里看一下,有一个很好的解释:
http://www.learncpp.com/cpp-tutorial/17-3-stdstring-length-and-capacity/
NUL
字符,拼写方式不同于空指针NULL
。 - Spire