在此构造函数中initializer_list允许哪种初始化?
What sort of initialization does initializer_list allow for in this constructor?
我正在使用GUI库来阅读我正在阅读的教科书。其中一个用于"Lines"对象的构造函数具有以下代码。
struct Lines : Shape { // independent lines
Lines() {}
Lines(initializer_list<Point> lst) : Shape{lst} { if (lst.size() % 2) error("odd number of points for Lines"); }
void draw_lines() const;
void add(Point p1, Point p2) { Shape::add(p1); Shape::add(p2); }
};
我尝试了以下初始化,但它显示了 E0289 错误,指出
no instance of constructor "Graph_lib::Lines::Lines" matches the argument list
Lines li{ {Point{100,100},Point{200,200}},{Point{150,150},Point{250,250}}};
我想知道initializer_list
在这种情况下应该如何工作,以及在构造对象时应该如何使用它。
你实际上是在传递两个initializer_list
s。未定义此构造,因此会出现编译错误。
Lines li{ {Point{100,100},Point{200,200}} , {Point{150,150},Point{250,250}} };
// ^-----------------------------^ first
// ^-----------------------------^ second
应编译以下更改:
在构造函数中使用嵌套的初始值设定项列表:
Lines(initializer_list<initializer_list<Point>> lst)
或 在构造函数中添加第二个参数,接受另一个初始值设定项列表:
Lines(initializer_list<Point> lst, initializer_list<Point> lst2)
OR将调用中的两个初始值设定项列表合并为一个。
Lines li{ { Point{100,100}, Point{200,200}, Point{150,150}, Point{250,250} } }; // ^----------------------------------------------------------------^ // one initializer-list
我想知道
initializer_list
在这种情况下应该如何工作,以及在构造对象时应该如何使用它。
鉴于类定义是由教科书提供的,您可能正在寻找上面的 #3,其中Point
被分组为一个initializer-list
。
我猜它的 GUI 端可能是为了连接形成连接线的后续点,而不是接受形成单独线的点对。
相关文章:
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 为什么两种不同的对象初始化方式给出不同的输出
- 初始化类的两种方法?
- 两种初始化有什么区别:Foo f();Foo f = Foo()
- 使用每种类型的可变参数模板上的类模板初始化元组
- 初始化结构的两种方式
- 重新初始化指针是一种不好的做法吗?
- 初始化`rand()的两种方法
- 标准的哪一部分决定了现场成员与初始化器列表的优先级
- 在此构造函数中initializer_list允许哪种初始化?
- 在 C++ 中,字符串的这两种不同初始化有什么区别?
- C - 是否有一种方法可以超载指定的初始化器
- 初始化类成员中的变量是一种不好的做法吗?
- 有没有一种方法可以在不使用std ::移动的情况下初始化类构建类的类
- 哪一种是在C 中分配非初始化内存的最惯用方法
- 是一种基本类型的挥发性初始化,可观察到的行为
- 这两种初始化成员变量的方法之间有区别吗?
- 为复杂对象初始化选择哪种设计
- 3种初始化类型
- 尝试为特征矩阵实现一种初始化列表语法