括号序列的类型

The type of a bracketed sequence

让我们考虑以下代码:

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>? (其中 Tintstd::size_t)。


我不认为这是 Ranged for loop with literal list? 的重复,因为我特别想知道用于迭代的变量类型(std::size_t 在这种情况下)的情况std::initializer_list<int> 是否会影响编译器。

I specifically would like to know about the situation whether the type std::size_t of the varibale used to iterate over the std::initializer_list will influence the compiler or not

不会。标准指定的 equivalent 语句,以及您链接到的问题,以如下内容结束:

auto && __range = {0,1,2,3,4,5,6,7};
//...
for(/*...*/) {
   std::size j = *__begin;
   // ...
}

没有明确要求j影响__range的推导,根据范围的一般规则也不应该。 j 将仅使用转换后的 int.

进行初始化