struct A1
{
int n;
};
struct A2
{
int n;
A2(){}
};
struct A3
{
int n;
A3() = default;
};
问题1:
C++标准是否保证类A1
,A2
,A3
是完全等同的?
问题2:
A1 a1;
A2 a2;
A3 a3;
编译器不会按照C++标准对
a1.n
、a2.n
、a3.n
进行零初始化吗?struct A1
{
int n;
};
struct A2
{
int n;
A2(){}
};
struct A3
{
int n;
A3() = default;
};
问题1:
C++标准是否保证类A1
,A2
,A3
是完全等同的?
问题2:
A1 a1;
A2 a2;
A3 a3;
a1.n
、a2.n
、a3.n
进行零初始化吗?有一个区别,A1
和A3
是聚合类型,而A2
不是,因为它具有用户定义的构造函数。
类类型(通常为结构体或联合体),具有
- ...
- 没有用户提供的
、继承的或显式的(自C++17起)
构造函数(显式默认或已删除的构造函数是允许的)(自C++11起)
- ...
这意味着对于A1
和A3
,它们可以进行聚合初始化,而A2
则不能。
A1 a1{99}; // fine; n is initialized to 99
A3 a3{99}; // fine; n is initialized to 99
A2 a2{99}; // error; no matching constructor taking int found
a1.n
、a2.n
和 a3.n
进行零初始化呢?struct A1
{
int n;
};
struct A2
{
int n;
A2(){}
};
struct A3
{
int n;
A3() = default;
};
int main()
{
A1 obj1{42};
//A2 obj2{42}; // error
A3 obj3{42};
return 0;
}