【问题标题】:Why I get this warning? "Member 'x' was not initialized in this constructor"为什么我会收到此警告? “成员 'x' 未在此构造函数中初始化”
【发布时间】:2018-11-24 11:22:27
【问题描述】:

给出以下代码:

class Class {
    int x;
public:
    Class() = default;
};  

我收到以下警告:

成员“x”未在此构造函数中初始化

这个警告的原因是什么?

【问题讨论】:

  • 那是因为你的成员没有被初始化
  • 你用什么编译器?
  • 这个警告不是不言自明吗?

标签: c++ c++11 default-constructor


【解决方案1】:

x 是一个int,其默认初始化使其具有不确定的值。最简单、最统一的解决方法是在其声明中对其进行值初始化。

class Class {
    int x{}; // added {}, x will be 0
  public:
    Class() = default;
};

您也可以使用int x = 5;int x{5}; 来提供默认值

【讨论】:

    【解决方案2】:

    这个警告的原因是什么?

    defaulted 默认构造函数不会初始化基本类型的任何成员。因此,x 未初始化。

    您可以通过使用构造函数中的成员初始化方法来解决问题

    Class() : x(0) {}
    

    或班级成员初始化。

    int x = 0;
    Class() = default;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多