Jur*_*aho 13 c++ for-loop range initializer-list c++11
我有从单个超类型派生的不同类型的对象.我想知道std::initializer在循环范围内使用list 是否有任何缺点,如下所示:
for(auto object: std::initializer_list<Object *>{object1, object2, object3}) {
}
Run Code Online (Sandbox Code Playgroud)
它是完全正常和有效还是使用阵列会更好?对我来说,std::array解决方案似乎对编译器更具限制性,并且存在明确说明大小的缺点:
for(auto object: std::array<Object*, 3>{object1, object2, object3}) {
}
Run Code Online (Sandbox Code Playgroud)
是否有任何其他或更好的方法迭代明确给定的对象列表?
Tem*_*Rex 10
没有必要std::initializer_list在循环内使用详细信息
#include <iostream>
#include <initializer_list>
struct B { virtual int fun() { return 0; } };
struct D1 : B { int fun() { return 1; } };
struct D2 : B { int fun() { return 2; } };
int main()
{
D1 x;
D2 y;
B* px = &x;
B* py = &y;
for (auto& e : { px, py })
std::cout << e->fun() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
实例.
如果你想这样做的即时没有定义px和py,你的确可以使用std::initializer_list<B*>{ &x, &y }内循环.
你可以简单地写
for(auto object : {object1, object2, object3}) {
// work
}
Run Code Online (Sandbox Code Playgroud)