【发布时间】:2016-05-05 17:31:36
【问题描述】:
C++11 保证 std::string 在内部存储 nul 终止符。如果没有明确的terminate 方法,如何实现?
例子:
std::string foo("Baz");
printf("foo contains %s\n",&foo[0]); //Completely safe
【问题讨论】:
-
不确定我是否理解这个问题。你能解释一下你的意思吗?例如,为什么需要
terminate方法? -
通过在内部有一个指针,该指针指向一个至少包含
size() + 1个字符的数组,并且可能以终止符作为最后一个字符。 -
字符串构造函数复制字符串并添加空终止符。
-
截断很容易,只需将终止符设置为新大小即可。追加,或者像
std::vector一样重新分配,或者分配一些额外的内存开始,然后将新字符复制到终止符上,并将终止符设置为下一个字符。 -
@user877329:COW 在 C++11 中是非法的。 GCC 最终赶上了这一点。
标签: c++11 language-lawyer stdstring