Bar*_*ide 2 c++ struct initialization member-initialization c++11
我创建了一个类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
Run Code Online (Sandbox Code Playgroud)
我注意到在 main 中,我可以声明一个对象并以这种方式初始化它:
Point myPoint(1, 1);
Run Code Online (Sandbox Code Playgroud)
如果我想创建一个包含两个点的结构,它不会让我以这种方式初始化它,相反,我必须使用大括号,这样:
struct segment
{
Point point1 = {0, 0};
Point point2 = {15, 15};
};
Run Code Online (Sandbox Code Playgroud)
这是为什么?
因为默认成员初始化器(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
};
Run Code Online (Sandbox Code Playgroud)
Point myPoint(1, 1); 因为默认成员初始值设定项可能会导致函数声明的歧义问题。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |