gpt4 book ai didi

c++ - 在 'for (auto c : str)'中c到底是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:23:09 27 4
gpt4 key购买 nike

如果我声明:

string s = "ARZ";

然后运行以下代码:

for (auto& c : s) {
cout << (void*)&c << endl;
}

结果将分别对应s[0]s[1]s[2]的地址。

如果我删除 & 并运行:

for (auto c : s) {
cout << (void*)&c << endl;
}

c 的地址总是相同的。

大概 c 只是一个指向 vector 的指针,它的值在每个循环中增加 sizeof(char) 但我发现很难理解为什么我不需要编写 *c 来访问字符串 char 值。

最后,如果我运行:

for (auto c: s) {
c='?';
cout << c << endl;
}

它打印出 3 个问号。

我发现很难理解 c 到底是什么?

最佳答案

In 'for (auto c : str)' what exactly is c?

它是一个局部变量,其作用域是整个for block 并且具有char 类型。

for (auto c : str) { loop_statement }

相当于

{
for (auto __begin = str.begin(), __end = str.end(); __begin != __end; ++__begin) {
auto c = *__begin;
loop_statement
}
}

在某些实现中,在某些条件下,由于 c 的生命周期在下一次迭代的 c 生命周期开始之前结束,它会在同一位置分配并获得同一个地址。你不能依赖它。

关于c++ - 在 'for (auto c : str)'中c到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58116510/

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