c++ - 带有静态数组成员变量的迭代器

标签 c++ iterator

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

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

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

for (int i = 0; i < 1000; ++i) {
    for (auto i: X) {
        // do stuff.
    }
}

最佳答案

我假设您想在每个循环的迭代器构造中将某些内容复制到静态数组中。我进一步假设您覆盖了整个数组并且您这样做是因为您已经意识到否则数据会丢失。如果您将它用于 sg,我很乐意放弃该假设。否则,但这是 range for 的一个非常普遍的问题。 您的代码不会是可重入的,更不用说线程安全的了。这意味着,根据您执行此操作的方式,您甚至可能无法执行嵌套循环。这是一个非常的坏主意... ... 哎呀,与临时对象的范围一样糟糕。也许最好的办法/解决方法是将 shared_ptr<> 保留为您想要保留的内容。如果您为 ptr 而不是范围编写拥有 begin() 和 end() 的代码,则这可能包括范围本身。 (来自 enable_shared_from_this() 的模糊性或潜在 UB)。

关于c++ - 带有静态数组成员变量的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39987151/

相关文章:

c++ - C++11 标准中的 §12.3.2/1 似乎存在矛盾

c++ - 重载构造函数以处理不同的数据类型

c++ - 如何在 C++ 中同时转换右值和左值参数?

Java - 迭代两个列表,比较然后添加到另一个列表

c# - C# 中的生成器?

c++ - 无法从可转换类型初始化非常量引用

C++ 浮点加法(从头开始): Negative results cannot be computed

Scala Iterator.takeWhile 正在删除失败的元素

javascript - 如何在 ES6 类方法中使用迭代器

typescript - 类型 'HTMLCollectionOf<HTMLCanvasElement>' 必须有一个返回迭代器的 '[Symbol.iterator]()' 方法