括号序列的类型

时间:2017-10-30 12:20:40

标签: c++ c++11 initializer-list

让我们考虑以下代码:

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>会影响编译器。

1 个答案:

答案 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进行初始化。