让我们考虑以下代码:
for(std::size_t j : {0,1,2,3,4,5,6,7})
{
// do something with j
}
编译器为序列{0,1,2,3,4,5,6,7}
创建的基础类型是什么?
是std::vector<T>
和std::array<T, 8>
还是std::initializer_list<T>
? (其中T
为int
或std::size_t
)。
我不认为这是Ranged for loop with literal list?的副本,因为我特别想了解用于迭代变量的变量类型(在这种情况下为std::size_t
)的情况std::initializer_list<int>
会影响编译器。
答案 0 :(得分:4)
我特别想了解用于迭代std :: initializer_list的varibale类型std :: size_t是否会影响编译器的情况
不会。标准所指定的等效语句以及您链接到的问题最终会出现如下内容:
auto && __range = {0,1,2,3,4,5,6,7};
//...
for(/*...*/) {
std::size j = *__begin;
// ...
}
没有明确要求j
影响__range
的推论,也不应该根据范围的一般规则。 j
只会使用已转换的int
进行初始化。