首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以下初始化在C++中等效

以下初始化在C++中等效
EN

Stack Overflow用户
提问于 2020-06-11 20:20:26
回答 1查看 50关注 0票数 2

我读到,与使用圆形大括号的“旧”方式相比,list-initialization更受欢迎,因为它们不允许收缩转换auto关键字具有类似的属性,因为它完全避免了转换。我想知道以下两项声明是否相等:

代码语言:javascript
复制
auto a = SomeClass(arg_a, arg_b);
auto b = SomeClass{arg_a, arg_b};

也就是说,除了b的名字不同于a ;)

同样地,我的意思是,对于SomeClass所采用的任何论点,无论在任何情况下,我都可以将导致构造a的表达式替换为导致b的构造,当然,前提是我使用auto关键字。是这种情况,还是有任何陷阱/考虑因素?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-11 20:24:31

它们可能是相同的,也可能不是相同的,这取决于类型。例如,如果您有一个std::vector,那么

代码语言:javascript
复制
auto vec1 = std::vector<int>(1, 2);

的形式调用构造函数

代码语言:javascript
复制
vector( size_type count,
        const T& value,
        const Allocator& alloc = Allocator());

它创建一个大小为1的向量,其元素的值为2。使用

代码语言:javascript
复制
auto vec1 = std::vector<int>{1, 2};

这个

代码语言:javascript
复制
vector( std::initializer_list<T> init,
        const Allocator& alloc = Allocator() );

调用构造函数,该构造函数创建一个大小为2的向量,其中包含元素{1, 2}

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62332890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档