gpt4 book ai didi

c++ - 为什么基于 C++ 范围的 for 循环在每次迭代时调用析构函数?

转载 作者:行者123 更新时间:2023-11-30 02:53:43 25 4
gpt4 key购买 nike

我正在使用基于范围的 for 循环来使用迭代器读取(和解析)文件。我的循环看起来像这样:

for (auto record : reader) {
if (even)
record.reverse_complement();
cout << record.write();
even = !even;
}

我已将输出添加到迭代器的构造函数和析构函数,看起来析构函数是在 for 循环的每次迭代中对 end() 返回的迭代器调用的。

calling fq_iter FULL constructor 
calling fq_iter default constructor
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_reader destructor on 0

这些是我用来解析和迭代文件的类,知道为什么每次迭代都调用析构函数吗? (除此之外,它会产生正确的输出)。

最佳答案

根据 C++ 标准的第 6.5.4 节,您的编译器不应该这样做。相反,它应该将结束迭代器缓存在一个不可命名的本地。

您的 operator!= 是否复制了迭代器(意外的按值传递)?

关于c++ - 为什么基于 C++ 范围的 for 循环在每次迭代时调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17705360/

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