Closed. This question needs to be more focused。它当前不接受答案。












想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。

2年前关闭。



Improve this question




很想知道与Pascal相比,c++中的字符串分配有何不同。

字符串如何分配?

C++也有char数组/ char * / const char *,它们的分配和使用方式有何不同?

最佳答案

由长度和字符代码序列组成的字符串称为Pascal string。更具描述性地,它称为长度前缀的字符串。例如,使用Windows API的SysAllocString函数创建的字符串是一个带前缀的字符串,也就是Pascal字符串。

相反,C++原始字符串文字由字符代码组成,后跟一个空值,一个零终止字符串

从C++ 11和更高版本开始,std::string具有一个缓冲区,该缓冲区可以视为以零结尾的字符串,但它也具有单独的显式长度。没有指定长度或缓冲区的存储位置。这在不同的实现之间有所不同。

零终止字符串或Pascal字符串的存储空间可以以您希望的任何方式动态或作为局部变量进行分配。

对于C++的std::string,通常必须通过std::string配备的标准分配器来动态分配缓冲区,因为字符串可能会很大,并且因为客户端代码无法提供缓冲区。

但是,与std::vector不同,没有对std::string的要求,该要求禁止为足够小的字符串使用固定大小的缓冲区,因此许多(大多数?)实现现在都提供了短字符串优化。对于足够短的字符串值,则可以将所有内容直接放入std::string对象中。例如。作为局部变量。
operator[]std::string有C++ 11和更高的恒定时间要求,这有效地防止了某些C++ 03实现使用的COW(写时复制)共享所有权策略。

关于c++ - c++和pascal字符串之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48382577/

10-10 11:19
查看更多