我正在尝试使用默认构造函数创建一个非常基本的类:
class Point {
public:
Point() = default;//con 1
explicit Point(double x): x_axis(x), y_axis(0){}//con 2
Point(const Point &other) = default;
~Point() = default;
private:
double x_axis;
double y_axis;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在main()函数中使用默认构造函数时,它会生成一个随机垃圾值x_axis:
Point p1;//generates random value
Point p2{};//works as intended
Run Code Online (Sandbox Code Playgroud)
这是为什么?当我像这样使用其他构造函数(con 2)时:
explicit Point(double x = 0): x_axis(x), y_axis(0){}
Run Code Online (Sandbox Code Playgroud)
它们都按预期工作。
{} 有效,但在第二次尝试中它们都有效?{}?这是因为第二个构造函数用值初始化成员变量,而第一个构造函数使成员变量保留不确定的值。
要么做:
class Point {
public:
Point() : x_axis{}, y_axis{} {} // instead of = default
...
Run Code Online (Sandbox Code Playgroud)
或者
class Point {
public:
Point() = default;
// ...
private:
double x_axis{}; // {} or
double y_axis = 0.0; // = 0.0
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |