C 编译器对此初始列表有什么作用

What does a C++ compiler do with this initializer list?

本文关键字:列表 什么 作用 编译器      更新时间:2023-10-16

使用这样的初始化列表时:

for (int i : {3, 1, 6, 4})
{
    std::cout << "i=" << i << std::endl;
}

OUPUT的顺序为3、1、6,最后4个。因此,我知道编译器必须使用类似于std::vector<int>而不是std::set<int>的东西。

这可以保证吗?我在哪里可以找到解释编译器如何解释{3, 1, 6, 4}的文档。

您正在创建std::initializer_list<int>的实例。有关详细信息

从该页面:

类型std::initializer_list<T>的对象是一个轻巧的代理对象,可访问类型const T的对象。

保证输出顺序。但是,这不是因为编译器创建了std::vector<int>。可以保证,因为initializer_list下方有一个int s。

您的基于范围的循环使用Brad-Init-list作为范围表达式,该范围表达式构建了类型std :: prinistiber_list&lt; int&gt;。保证该订单是因为8.5.4.5。N4140草案/标准状态(重点矿山)的段落:

类型std :: initializer_list&lt; e&gt;是由 初始化列表就像分配了临时的实现 n元素的数组类型常规的,其中n是 初始化列表中的元素。