循环范围内的初始值设定项列表
Initializer list in a range for loop
我有从单个超类型派生的不同类型的对象。我想知道在这样的循环范围内使用std::initializer
列表是否有任何缺点:
for(auto object: std::initializer_list<Object *>{object1, object2, object3}) {
}
它是完全可以和高效的还是使用数组会更好?对我来说,std::array
解决方案似乎对编译器更具限制性,并且明确说明大小有一个缺点:
for(auto object: std::array<Object*, 3>{object1, object2, object3}) {
}
是否有其他或更好的方法来迭代显式给定的对象列表?
无需在循环中使用详细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";
}
活生生的例子。
如果你想在不定义px
和py
的情况下即时完成,你确实可以在循环中使用std::initializer_list<B*>{ &x, &y }
。
你可以
简单地写
for(auto object : {object1, object2, object3}) {
// work
}
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 错误:未在此范围内声明'reverse'
- 并行用于C++17中数组索引范围内的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 不计算一个范围内的完美数
- 错误:"imread"未在此范围内声明
- 我在范围内未声明的错误类有问题
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 未在此范围内声明错误 'xy'
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- 以下是基于循环的范围内的幕后列表
- 循环范围内的初始值设定项列表
- 正在检查排序列表中是否有一个范围内的数字
- 列表节点指针"未在此范围内声明"?