繁体   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