为什么结构内部的对象初始化不同?
我创建了一个类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); 因为默认成员初始值设定项可能会导致函数声明的歧义问题。