gpt4 book ai didi

c++ - 为什么我的代码中 get<>() 分配的值会在构造之外发生变化?

转载 作者:行者123 更新时间:2023-11-30 01:46:38 25 4
gpt4 key购买 nike

为什么语句的输出是2不同于声明1

// a is of type vector < tuple <int, int> >

for (auto i: a)
{
get<0>(i)+=get<1>(i);
cout << get<0>(i) << " " << get<1>(i) << endl; // 1
}

for (auto i: a) cout << get<0>(i) << " " << get<1>(i) << endl; // 2

假设最初,a包含 [7, 3] , [9, 1]

然后 1输出

10 3
10 1

鉴于2输出

7 3
9 1

简而言之,循环封闭语句1好像没有效果。

我认为这与我对auto的使用有关并且不使用 *i更改值,但我认为我们不能使用 *iget .

最佳答案

因为当你这样做时:

for (auto i: a)

您正在为 a 中的每个元素制作拷贝。您正在按值迭代并修改容器元素的本地拷贝。如果你想真正修改容器的元素,你必须通过引用迭代:

for (auto& i : a)
^^^

auto 不推导出引用。

关于c++ - 为什么我的代码中 get<>() 分配的值会在构造之外发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32850310/

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