实际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中默认赋值运算符是如何实现的的主要内容,如果未能解决你的问题,请参考以下文章