为什么结构内部的对象初始化不同?

我创建了一个类Point,这里是对应的hpp文件。

#ifndef POINT
#define POINT
class Point
{
 protected:
 int x;
 int y;
 public:
 Point(int x = 10, int y = 10);
 void movePoint(int moveX, int moveY);
 void printCoordinates();
};
#endif

我注意到在 main 中,我可以声明一个对象并以这种方式初始化它:

Point myPoint(1, 1);

如果我想创建一个包含两个点的结构,它不会让我以这种方式初始化它,相反,我必须使用大括号,这样:

struct segment
{
 Point point1 = {0, 0};
 Point point2 = {15, 15};
};

这是为什么?

回答

因为默认成员初始化器(C++11 起)仅支持等号初始化器和花括号初始化器。

(强调我的)

这样你就可以

struct segment
{
Point point1 = {0, 0};        // equal-sign initializer
Point point2 = Point(15, 15); // equal-sign initializer
Point point3 = Point{30, 30}; // equal-sign initializer
Point point4 {45, 45};        // braced initializer
};

Point myPoint(1, 1); 因为默认成员初始值设定项可能会导致函数声明的歧义问题。


以上是为什么结构内部的对象初始化不同?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>