簡體   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