【问题标题】:how does the default assignment operator implemented in actual stl实际stl中默认赋值运算符是如何实现的
【发布时间】:2020-06-10 07:59:45
【问题描述】:

假设我们正在实现一个向量类并且我们做到了

向量 v;

v={1,2,3,4};

所以,这里我们正在实现我们自己的向量类,所以,这个列表如何作为参数传递给赋值运算符我们如何处理它,因为我们传递了指针变量和引用变量无法访问的常量。 但是这一切都可以在stl向量类中完成,那么它们是怎么做到的呢?

【问题讨论】:

标签: c++ c++11 c++14 c++17


【解决方案1】:

在 C++17 之前,所有函数的所有参数都命名为完全构造的对象。

prvalue std::initialiser_list<int> 对象(没有名称)是从{1,2,3,4} 构造的,这是构造函数的参数。一旦 v 的构造函数结束(特别是在创建它的完整表达式的末尾),该临时对象将不复存在。

从 C++17 开始,可以传递初始化对象的值。我们仍然称它为prvalue std::initialiser_list<int>,但它还不是一个对象。在v 初始化的某个地方,它被使用的地方,一个std::initialiser_list<int> 对象被构造。构造函数完成后它也不再存在。

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2015-08-23
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2017-02-17
    相关资源
    最近更新 更多