我读到,与使用圆形大括号的“旧”方式相比,list-initialization更受欢迎,因为它们不允许收缩转换。auto关键字具有类似的属性,因为它完全避免了转换。我想知道以下两项声明是否相等:
auto a = SomeClass(arg_a, arg_b);
auto b = SomeClass{arg_a, arg_b};也就是说,除了b的名字不同于a ;)
同样地,我的意思是,对于SomeClass所采用的任何论点,无论在任何情况下,我都可以将导致构造a的表达式替换为导致b的构造,当然,前提是我使用auto关键字。是这种情况,还是有任何陷阱/考虑因素?
发布于 2020-06-11 20:24:31
它们可能是相同的,也可能不是相同的,这取决于类型。例如,如果您有一个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() );调用构造函数,该构造函数创建一个大小为2的向量,其中包含元素{1, 2}。
https://stackoverflow.com/questions/62332890
复制相似问题