gpt4 book ai didi

c++ - 写入 std::string 是否合法?

转载 作者:IT老高 更新时间:2023-10-28 22:32:05 28 4
gpt4 key购买 nike

在 std::string 中只有 const 成员来获取数据,如 c_str()。但是,我可以通过 operator[] 获得对字符串第一个元素的引用,并且可以写入它。

例如,如果我有函数:

void toupper(char *first,char *last_plus_one);

我可以直接写入 vector 以获得指向第一个元素的指针:

vector<char> message // has "Some Message";
toupper(&message[0],&message[0]+message.size());

我可以用 std::string 做同样的事情吗?

string message="Some Message";
toupper(&message[0],&message[0]+message.size());

标准是否保证内存的位置实际上是线性的?即:

&(*(message.begin()+n)) == &message[n]

谢谢。

最佳答案

Herb Sutter 有话要说 (http://herbsutter.wordpress.com/2008/04/07/cringe-not-vectors-are-guaranteed-to-be-contiguous/#comment-483):

current ISO C++ does require &str[0] to cough up a pointer to contiguous string data (but not necessarily null-terminated!), so there wasn’t much leeway for implementers to have non-contiguous strings, anyway. For C++0x we have already adopted the guarantee that std::string contents must indeed be stored contiguously. For details, see http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#530

Matt Austern 在引用文档 (http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#530) 中也说过类似的话。

因此,您似乎可以假设,一旦您调用 str[0],您确实会得到一个可修改的字符数组(但请注意,它不需要以空字符结尾)。

关于c++ - 写入 std::string 是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/760790/

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