首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用空的默认构造函数时成员中的垃圾值问题

使用空的默认构造函数时成员中的垃圾值问题
EN

Stack Overflow用户
提问于 2022-05-15 12:53:17
回答 2查看 75关注 0票数 2

我正在尝试使用默认构造函数创建一个非常基本的类:

代码语言:javascript
运行
复制
    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;
    }

当我尝试在main()函数中使用默认构造函数时,它会为x_axis生成一个随机的垃圾值。

代码语言:javascript
运行
复制
    Point p1;//generates random value
    Point p2{};//works as intended

为什么会这样呢?当我使用其他构造函数(Con2)时,如下所示:

代码语言:javascript
运行
复制
    explicit Point(double x = 0): x_axis(x), y_axis(0){}

他们两人的工作都是按计划进行的。

为什么在第一次没有括号的尝试中,它会生成一个随机值,但是在第二次尝试中,它们都能工作?{}

  1. 调用默认构造函数是什么?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-15 12:58:32

这是因为第二个构造函数用值初始化成员变量,而第一个构造函数留给成员变量不确定的值。

要么做:

代码语言:javascript
运行
复制
class Point {
public:
    Point() : x_axis{}, y_axis{} {} // instead of  = default
...

代码语言:javascript
运行
复制
class Point {
public:
    Point() = default;

    // ...
private:
    double x_axis{};     // {}     or
    double y_axis = 0.0; // = 0.0  
};
票数 6
EN

Stack Overflow用户

发布于 2022-05-15 13:01:49

为什么在第一次尝试中,没有括号生成随机值,但{}有效,在第二次尝试中,它们都工作。

在第一次尝试时,您写道:

代码语言:javascript
运行
复制
 Point p1; //this uses default constructor

这里使用默认的ctor,它只是默认初始化、数据成员y_axisy_axis。因为它们是在类型中构建的,所以它们具有不确定的值。

在第二次尝试中,您写道:

代码语言:javascript
运行
复制
Point p2{}; //this is zero initailization

上面的是,意味着每个数据成员被初始化为0

现在,当您提供以下构造函数时:

代码语言:javascript
运行
复制
explicit Point(double x = 0): x_axis(x), y_axis(0) //this is a default constructor
{
}

上面的构造函数是一个默认构造函数,它使用0构造函数初始化程序列表中初始化两个数据成员。

因此,这一次,当您编写:

代码语言:javascript
运行
复制
Point p1; //this uses the above provided default ctor

这一次,p1是使用默认的ctor构造的,默认ctor将两个数据成员初始化为0,因此x_axisy_axis of p1都将初始化为0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72248443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档