上的文档std::string::c_str
说:
“返回一个指向数组的指针,该数组包含一个以空字符结尾的字符序列(即一个 C 字符串),表示字符串对象的当前值。”
这个数组是在调用 c_str 时动态分配的吗?如果不是,它来自哪里?
上的文档std::string::c_str
说:
“返回一个指向数组的指针,该数组包含一个以空字符结尾的字符序列(即一个 C 字符串),表示字符串对象的当前值。”
这个数组是在调用 c_str 时动态分配的吗?如果不是,它来自哪里?
在 C++11 之前,它是未指定的。string
对象管理它。在 C++11 中,它指向string
对象数据。
对于 C++2003,这取决于标准库的实现。它的实际存储很可能由std::string
. 有些实现可能使用内部缓冲区,有些可能使用单独的预分配缓冲区。虽然它是一个常量时间访问器,所以库实现可用的选项是有限的。
您不应该在标准允许的范围之外乱用该内存,因为标准库的不同实现可能会让您一头雾水。
有趣的是,对于 C++11,这有点定义,它必须指向内部缓冲区并且是std::string::data
.