簡體   English   中英

是否允許修改C ++ 11中operator []返回的內部std :: string緩沖區

[英]Is it permitted to modify the internal std::string buffer returned by operator[] in C++11

標准中是否存在違反operator[]返回的內部std::string緩沖區的修改的規則,如下所示:

void foo(char* buf)
{
  buf[1] = 's';
}

std::string str = "str";
modify_buffer(&str[0]);

我在C ++ 11草案中找到了有關datac_str函數的以下引用:

要求:程序不得更改存儲在字符數組中的任何值。

但是我沒有任何關於operator[]

operator[]

operator[]返回對該字符的引用。 因此,如果string不是NOT const ,則可以安全地對其進行修改。

對於C ++ 11,字符是連續存儲的,因此可以將&str[0]用作大小為str.size()的基礎數組的開頭。 如果string不是const ,則可以修改[ &str[0], &str[0] + str.size() )之間的任何元素。 例如,您可以傳遞&str[0]str.size()void func(char *arr, size_t arr_size)func(&str[0], str.size())

data()c_str()成員

對於C ++ 11和C ++ 14, data()c_str()返回const CharT* ,因此您不能使用返回的指針來修改元素。 但是,從C ++ 17開始 ,如果string不是const ,則data()將返回CharT* 並且data()將是&str[0]的別名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM