为什么class类型的成员需要初始化?
Why member of class type needs initialization?
我正在阅读 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()’
我的直觉是default ctor被删除了,因为structA
里面有一个class类型的成员。请问为什么要初始化class类型的成员?我们不能让它保持未初始化状态吗?
也许是一个非常微不足道的问题,但我很好奇这样设计背后的想法?我是 OOP 新手。
A a;
执行default initialization; a
获得 default-initialized,其成员 my_mem
也获得 default-initialized。对于 class 类型,这意味着将使用默认构造函数进行初始化,但 NoDefault
没有它,这会导致错误。 (built-in 类型的行为不同。在 default-initialization 中,它们可能被初始化为不确定的值。)
我正在阅读 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()’
我的直觉是default ctor被删除了,因为structA
里面有一个class类型的成员。请问为什么要初始化class类型的成员?我们不能让它保持未初始化状态吗?
也许是一个非常微不足道的问题,但我很好奇这样设计背后的想法?我是 OOP 新手。
A a;
执行default initialization; a
获得 default-initialized,其成员 my_mem
也获得 default-initialized。对于 class 类型,这意味着将使用默认构造函数进行初始化,但 NoDefault
没有它,这会导致错误。 (built-in 类型的行为不同。在 default-initialization 中,它们可能被初始化为不确定的值。)