[英]Will C++11 std::string::operator[] return null-terminated buffer
[英]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草案中找到了有關data
和c_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.