繁体   English   中英

为什么 string::c_str() 在动态分配字符串时返回 const char*?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM