为迭代器定义静态数组成员变量是个坏主意吗?
在下面的嵌套循环中,静态数组会被创建和销毁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/