gpt4 book ai didi

c++ - 是否允许在 C++11 中修改由 operator[] 返回的内部 std::string 缓冲区

转载 作者:行者123 更新时间:2023-12-01 14:14:29 25 4
gpt4 key购买 nike

标准中是否有违反内部修改的规则std::string operator[] 返回的缓冲区像这样:

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

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

我在 C++11 草案中发现了以下关于 data 的引用和 c_str职能:

Requires: The program shall not alter any of the values stored in the character array.



但我没有看到任何关于 operator[] 的信息.

最佳答案

operator[]


operator[]返回对字符的引用。所以如果 string不是 const ,您可以安全地修改它。

对于 C++ 11,字符是连续存储的,所以你可以取 &str[0]作为大小为 str.size() 的底层数组的开头.您可以修改 [ &str[0], &str[0] + str.size() ) 之间的任何元素,如果 string不是 const .例如您可以通过 &str[0]str.size()void func(char *arr, size_t arr_size) : func(&str[0], str.size())

data() and c_str() members



对于 C++11 和 C++14,都是 data()c_str()返回 const CharT* ,所以你不能用返回的指针修改元素。 However, from C++17, data() will return CharT* , 如果 string不是 const .和 data()将是 &str[0] 的别名.

关于c++ - 是否允许在 C++11 中修改由 operator[] 返回的内部 std::string 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38875623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com