[英]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.