代码之家  ›  专栏  ›  技术社区  ›  Aadil Hoda

为什么类类型的成员需要初始化?

  •  0
  • Aadil Hoda  · 技术社区  · 2 年前

    我正在阅读C++中的构造函数。我遇到了这个例子:

    #include <iostream>
    
    using namespace std;
    
    class NoDefault
    {
        public:
            NoDefault(const std::string&);
    };
    
    struct A
    {
        NoDefault my_mem;
    };
    
    int main()
    {
        A a;
        return 0;
    }
    

    它在汇编方面传达了以下信息:

    main.cpp:26:7: error: use of deleted function ‘A::A()’
    

    我可以直观地感觉到默认的ctor被删除了,因为结构中有一个类类型的成员 A .我想问为什么需要初始化类类型成员?我们不能不初始化它吗?

    也许是一个很琐碎的问题,但我很好奇这样设计背后的想法?我是OOP新手。

    1 回复  |  直到 2 年前
        1
  •  4
  •   songyuanyao    2 年前

    A a; 表演 default initialization ; a 获取初始化的默认值及其成员 my_mem 也会初始化默认值。对于类类型,这意味着默认构造函数将用于初始化,但 NoDefault 没有,这导致了错误。(内置类型的行为不同。在默认初始化中,它们可能被初始化为不确定的值。)