gpt4 book ai didi

c++ - std::string `s` 通过 `&s[0]` 转换为 char* - 这是如何/为什么起作用的?

转载 作者:行者123 更新时间:2023-11-30 04:44:29 24 4
gpt4 key购买 nike

<分区>

我遇到了 this way使用 std::string 接收缓冲区。

这里简化了:

error_enum_t  get_fn(char*, unsigned long, unsigned long*);

void getStringValuedAttribute(std::string &value)
{
if (value.size() == 0) {
value.resize(32);
}

unsigned long actual_size;
get_fn(&value[0], value.size(), &actual_size));

if (actual_size >= value.size()) {
value.resize(actual_size + 1);
get_fn(&value[0], value.size(), &actual_size);
}
}

在对 repl.it 进行一些挖掘之后,我看到 &value[0]char * 类型,我想这是有道理的,因为 value[0 ] 必须是 char。但这似乎可以直接访问 value 的缓冲区。这就是这里发生的一切,还是有更多的魔法在进行?

我试着深入了解 basic_string.h 的源代码,我看到了 _M_local_buf,但是有大量的模板操作正在进行,这不是我的强项。

如果我不得不猜测,value[] 正在利用 operator [] 重载来访问指向内部缓冲区开始的指针引用,这与 char * 兼容,因此 get_fn 能够将其视为普通缓冲区。

我的评估是否正确?这是一个明智的成语,不,它甚至安全吗?

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