繁体   English   中英

C++ 中的以下初始化是否等效

[英]Are the following initializations equivalent in C++

我读到通常列表初始化优于使用圆括号的“旧”方式,因为它们不允许缩小转换 auto关键字具有相似的属性,因为它完全避免了转换。 我想知道以下两个语句是否等效:

auto a = SomeClass(arg_a, arg_b);
auto b = SomeClass{arg_a, arg_b};

也就是说,除了 b 的名称与 a 不同的事实之外;)

等效,我的意思是无论 arguments SomeClass采用什么,在任何情况下,我都可以用导致构建a的表达式替换导致构建b的表达式,当然前提是我使用的是auto关键字。 是这种情况,还是有任何陷阱/考虑?

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

auto vec1 = std::vector<int>(1, 2);

调用构造函数的形式为

vector( size_type count,
        const T& value,
        const Allocator& alloc = Allocator());

它创建了一个大小为1的向量,其中元素的值为2

auto vec1 = std::vector<int>{1, 2};

vector( std::initializer_list<T> init,
        const Allocator& alloc = Allocator() );

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM