std::string s1;
std::string s2;
assert(strlen(s1.c_str()) == 0);
assert(s1.c_str() == s2.c_str());
这两个断言总是成立吗?
我使用C++11,并检查了标准,第21.4.2节的表格63中说:
data()是可复制且可以添加0的非空指针 size()为0 capacity()是未指定的值
我认为
c_str()
与data()
相同。但是我对此定义有些疑问。1. "CAN have 0 added to it" == "MUST and ALWAYS have 0 added to it"是否相等? 2. 所有默认构造的std::string共享同一个底层缓冲区吗?
我在gcc上测试,这两个断言都为真。我想知道这对于所有编译器是否始终如此?
--enable-fully-dynamic-string
,请参见https://gcc.gnu.org/onlinedocs/libstdc++/manual/configure.html。 - user17732522