gpt4 book ai didi

c++ - 由于运算符重载,我可以用 '=' 初始化 std::vector 吗?

转载 作者:行者123 更新时间:2023-11-30 02:25:25 25 4
gpt4 key购买 nike

我注意到在 C++11 中我可以通过以下方式(不仅限于这些)初始化 vector :

std::vector<int> v1{0,1,2};
std::vector<int> v2={3,4,5};

我想在第一行中使用了以下构造函数:

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

我怀疑第二行是否使用相同的构造函数或涉及'='的运算符重载。

在这里http://en.cppreference.com/w/cpp/language/list_initialization , 它说

T object = {arg1, arg2, ...};

被认为是一个 initializer_list,对吧?在这种情况下,不应该涉及“=”的重载,对吧?

最佳答案

是的,这里使用同一个构造函数来构造对象。

std::vector<int> v1{0,1,2};direct list intialization , 而 std::vector<int> v2={3,4,5};copy list intialization ,两者都是初始化,这意味着将调用适当的构造函数来构造 std::vector .它们不是赋值,因此与赋值运算符无关(即 operator= )。

另一方面,这是赋值:

std::vector<int> v2; // default initialization
v2 = {3,4,5}; // this is assignment;
// std::vector::operator=(std::initializer_list<T>) will be invoked

关于c++ - 由于运算符重载,我可以用 '=' 初始化 std::vector 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44147864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com