gpt4 book ai didi

c++ - STL独立初始化列表

转载 作者:太空狗 更新时间:2023-10-29 22:58:21 24 4
gpt4 key购买 nike

我对初始化列表有点困惑。

我认为初始化列表是 C++ 的一部分:

struct Something { char c0, c1; };

Something something = { 'H', 'W' };

类比数组等。并且(在我看来)与STL(在标题<initializer_list>中)有联系,称为std::initializer_list<T> ,它匹配初始值设定项列表,例如方法参数等

std::initializer_list<char> list = { 'H', 'e', 'l', 'l', 'o' };

现在我的困惑:

auto match = { 'H', 'e', 'l', 'l', 'o' };

当我查看 auto 是什么时解释(在 MSVC 2015 中),它是 std::initializer_list<char> .

所以我的问题是:

C++ 语言和 STL 库之间的界线在哪里?

是否有一些指令指定应如何解释初始化列表(在 C++ 中的含义)?

可能会改变解释,例如来自 std::initializer_list<T>进入T[]

最佳答案

这是一个 aggregate initialization

struct Something { char c0, c1; };
Something something = { 'H', 'W' };

Where is the line between C++ language and STL library?

这并不是 C++ 语言STL 库 之间的区别,因为标准库本身是用 C++ 编写的(将它们视为两个独立的库是没有意义的实体)。要点在于区分您正在初始化的元素类型以及可用的构造函数。

大部分的混淆源于这样一个事实,即提案和缺陷报告激起了关于如何解释花括号初始化的相当多的争论(参见 Scott Meyers articles ,其中一些也是 recently discussed ).

Is there some directive specifying how should be initializer list (in C++ meaning) interpreted?

理解它的唯一正确方法是能够识别您正在使用的类型并理解 C++ standard指令(根据您使用的 C++ 版本和编译器支持)。

关于c++ - STL独立初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40804645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com