【问题标题】:Can I initialize a std::vector with '=' thanks to the operator overloading?由于运算符重载,我可以使用 '=' 初始化 std::vector 吗?
【发布时间】:2017-10-24 04:15:14
【问题描述】:

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

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, ...};

被认为是一个初始化列表,对吧?在这种情况下,不应该涉及 '=' 的重载对吗?

【问题讨论】:

  • 是的,这是列表初始化,您链接的文档中的案例 #10。
  • 是不是说不涉及'='的重载?
  • @Christian 是的,不涉及。

标签: c++ c++11 vector initialization operator-overloading


【解决方案1】:

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

std::vector&lt;int&gt; v1{0,1,2};direct list intialization,而std::vector&lt;int&gt; 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2017-04-17
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多