使用' std::string::c_str '返回一个动态分配的数组

Does using `std::string::c_str` return a dynamically allocated array?

本文关键字:一个 数组 动态分配 str string std 返回 使用      更新时间:2023-10-16

std::string::c_str的文档说:

"返回一个指向数组的指针,该数组包含以空结束的字符序列(即C-string),表示字符串对象的当前值。"

这个数组是否在调用c_str时动态分配?如果不是,它从何而来?

对于c++ 2003,这取决于标准库的实现。它的实际存储很可能由std::string实例管理。有些实现可能使用内部缓冲区,有些可能使用单独的预分配缓冲区。但它是一个常量时间访问器,因此库实现的可用选项是有限的。

你不应该在标准允许的范围之外乱搞内存,因为你可能会因为标准库的不同实现而惨败。

有趣的是,对于c++ 11来说,这是更有定义的,它必须指向内部缓冲区,并且是std::string::data的同义词。

在c++ 11之前,它是未指定的。由string对象管理它。在c++ 11中,它指向string对象数据。

相关文章: