C++ 具有静态数组成员变量的迭代器

C++ 具有静态数组成员变量的迭代器,c++,iterator,C++,Iterator,为迭代器定义静态数组成员变量是个坏主意吗 在下面的嵌套循环中,静态数组是否会被创建和销毁1000次?(假设我们使用编译器优化) X是一个范围对象,具有begin()和end()成员函数。两个成员函数都返回一个带有静态数组成员变量的迭代器 for (int i = 0; i < 1000; ++i) { for (auto i: X) { // do stuff. } } for(int i=0;i

为迭代器定义静态数组成员变量是个坏主意吗

在下面的嵌套循环中,静态数组是否会被创建和销毁1000次?(假设我们使用编译器优化)

X
是一个范围对象,具有
begin()
end()
成员函数。两个成员函数都返回一个带有静态数组成员变量的迭代器

for (int i = 0; i < 1000; ++i) {
    for (auto i: X) {
        // do stuff.
    }
}
for(int i=0;i<1000;++i){
用于(自动i:X){
//做事。
}
}

我假设您希望在每个循环的迭代器构造中复制一些内容到静态数组中。我进一步假设您覆盖了整个阵列,这样做是因为您意识到,否则数据会丢失。如果你把它用于sg,我很乐意抛弃这个假设。除此之外,这是一个非常常见的问题。 你的代码不会是可重入的,更不用说线程安全了。这意味着,根据您的操作方式,您甚至可能无法执行嵌套循环。这是一个非常糟糕的主意。。。
... 哎呀,就跟你对临时工的射程一样糟糕。也许最好的做法/解决办法是保留一份您想要保留的共享文件。如果您为ptr而不是范围编写begin()和end(),则可能包括范围本身。(这种模糊或潜在的UB来自于启用\u共享\u来自\u this())。

是。C++迭代器。目前描述的那种请。这是相当模糊的,所以静态数组在外循环的迭代过程中确实会被破坏。谢谢。从技术上讲,只有当程序退出或你手动说出来时,它才会被销毁:语言律师会说它要么被重新分配(即被覆盖),要么什么也没发生,这取决于你写的内容。我相信这也不是你想要的。