[英]Why does string::c_str() return a const char* when strings are allocated dynamically?
为什么它返回一个常量 char指针? C++11 标准说:
返回的指针指向字符串 object 当前使用的内部数组,用于存储符合其值的字符。
动态分配的东西怎么可能是常量( const char*
)?
在 C 和 C++ 中, const
或多或少地转换为“只读”。
所以,当某些东西返回一个char const *
时,这并不一定意味着它指向的数据实际上是const
——它只是意味着你收到的指针只支持读取而不是写入它指向的数据。
字符串 object 本身可能能够修改该数据——但是(至少通过您收到的指针)您不允许直接修改数据。
c_str
返回的指针被声明为指向一个const char
以防止通过该指针修改内部string
缓冲区。
string
缓冲区确实是动态分配的, c_str
返回的指针只有在字符串本身不变的情况下才有效。 引用cppreference.com :
从
c_str()
获得的指针可能会通过以下方式失效:
将对字符串的非常量引用传递给任何标准库 function,或
在字符串上调用非常量成员函数,不包括 operator[]、at()、front()、back()、begin()、rbegin()、end() 和 rend()。
我将把这个问题解释为你为什么不能将它转换回char *
并写入它并期望它能够工作。
标准库为自己保留了在复制构造函数中延迟复制字符串的选项; 因此,如果您通过c_str()
的结果写入它,您可能会写入其他字符串。 由于c_str()
的大多数使用不需要写入字符串,因此对c_str()
的调用进行去重会造成太大的损失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.