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



我读到列表初始化通常比使用圆括号的"旧"方式更受欢迎,因为它们不允许缩小转换范围。auto关键字具有类似的属性,因为它完全避免了转化。 不知道以下两种说法是否等价:

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

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

等价,我的意思是,无论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() );

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

相关内容

  • 没有找到相关文章

最新更新