实际stl中默认赋值运算符是如何实现的

Posted

技术标签:

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

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

向量 v;

v=1,2,3,4;

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

【问题讨论】:

vector& operator=(std::initializer_list<T>). 【参考方案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> 对象被构造。构造函数完成后它也不再存在。

【讨论】:

以上是关于实际stl中默认赋值运算符是如何实现的的主要内容,如果未能解决你的问题,请参考以下文章

C ++ STL - 相当于具有赋值的运算符函数对象模板?

STL详解—— list的模拟实现

C++STL详解—— vector的模拟实现

C++STL详解—— string类的模拟实现

C++STL:string类的模拟实现

从复制构造函数调用默认赋值运算符是不好的形式吗?