【发布时间】:2020-06-10 07:59:45
【问题描述】:
假设我们正在实现一个向量类并且我们做到了
向量 v;
v={1,2,3,4};
所以,这里我们正在实现我们自己的向量类,所以,这个列表如何作为参数传递给赋值运算符我们如何处理它,因为我们传递了指针变量和引用变量无法访问的常量。 但是这一切都可以在stl向量类中完成,那么它们是怎么做到的呢?
【问题讨论】:
假设我们正在实现一个向量类并且我们做到了
向量 v;
v={1,2,3,4};
所以,这里我们正在实现我们自己的向量类,所以,这个列表如何作为参数传递给赋值运算符我们如何处理它,因为我们传递了指针变量和引用变量无法访问的常量。 但是这一切都可以在stl向量类中完成,那么它们是怎么做到的呢?
【问题讨论】:
在 C++17 之前,所有函数的所有参数都命名为完全构造的对象。
prvalue std::initialiser_list<int> 对象(没有名称)是从{1,2,3,4} 构造的,这是构造函数的参数。一旦 v 的构造函数结束(特别是在创建它的完整表达式的末尾),该临时对象将不复存在。
从 C++17 开始,可以传递初始化对象的值。我们仍然称它为prvalue std::initialiser_list<int>,但它还不是一个对象。在v 初始化的某个地方,它被使用的地方,一个std::initialiser_list<int> 对象被构造。构造函数完成后它也不再存在。
【讨论】: