anc*_*ild 2 c++ auto list-initialization
我读到列表初始化通常优于使用圆括号的“旧”方式,因为它们不允许缩小转换。该auto关键字具有相似的属性,因为它根本避免了转换。我想知道以下两个语句是否等效:
auto a = SomeClass(arg_a, arg_b);
auto b = SomeClass{arg_a, arg_b};
Run Code Online (Sandbox Code Playgroud)
也就是说,除了 b 与 a 的名称不同这一事实之外;)
通过等效,我的意思是,对于任何参数SomeClass,在任何情况下,我都可以将导致a构造的表达式替换为导致b构造的构造,当然前提是我使用了auto关键字。是这种情况,还是有任何陷阱/注意事项?
它们可能相同也可能不同,这取决于类型。例如,如果你有一个std::vectorthen
auto vec1 = std::vector<int>(1, 2);
Run Code Online (Sandbox Code Playgroud)
以以下形式调用构造函数
vector( size_type count,
const T& value,
const Allocator& alloc = Allocator());
Run Code Online (Sandbox Code Playgroud)
它创建了一个大小1为 的向量,其元素值为2。和
auto vec1 = std::vector<int>{1, 2};
Run Code Online (Sandbox Code Playgroud)
这
vector( std::initializer_list<T> init,
const Allocator& alloc = Allocator() );
Run Code Online (Sandbox Code Playgroud)
构造函数被调用,它创建一个2包含元素的大小的向量{1, 2}。