![](/img/trans.png)
[英]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.