C++;默认初始化类型 为什么这两种场景(A和C的初始化)在C++ 14中产生不同的默认初始化结果? 我无法理解基于cppreference.com中默认初始化规则的结果 struct A { int m; }; struct C { C() : m(){}; int m; }; int main() { A *a, *d; A b; A c{}; a=new A(); d=new A; cout<<a->m<<endl; cout<<d->m<<endl; cout<<b.m<<endl; cout<<c.m<<endl; cout<<"--------------------"<<endl; C *a1, *d1; C b1; C c1{}; a1=new C(); d1=new C; cout<<a1->m<<endl; cout<<d1->m<<endl; cout<<b1.m<<endl; cout<<c1.m<<endl; }

C++;默认初始化类型 为什么这两种场景(A和C的初始化)在C++ 14中产生不同的默认初始化结果? 我无法理解基于cppreference.com中默认初始化规则的结果 struct A { int m; }; struct C { C() : m(){}; int m; }; int main() { A *a, *d; A b; A c{}; a=new A(); d=new A; cout<<a->m<<endl; cout<<d->m<<endl; cout<<b.m<<endl; cout<<c.m<<endl; cout<<"--------------------"<<endl; C *a1, *d1; C b1; C c1{}; a1=new C(); d1=new C; cout<<a1->m<<endl; cout<<d1->m<<endl; cout<<b1.m<<endl; cout<<c1.m<<endl; },c++,initialization,c++14,default-value,C++,Initialization,C++14,Default Value,这篇文章试图解释这一点(但我还不清楚为什么结果不同,以及是什么原因导致在每个场景中初始化m):A没有用户定义的构造函数,因此生成了一个默认构造函数C有一个用户定义的构造函数,因此不能保证生成了默认构造函数,特别是因为用户定义的构造函数重载了默认构造函数。几乎可以肯定的是,C的每个构造都使用用户定义的构造函数 在用户定义的C构造函数中,使用初始化列表初始化C::m。初始化C::m时,它是值初始化的,其中包括零初始化 新的A和ab是默认的初始化。这不会设置为其成员指定任何值。A::m中存储的值是未定

这篇文章试图解释这一点(但我还不清楚为什么结果不同,以及是什么原因导致在每个场景中初始化m):

A
没有用户定义的构造函数,因此生成了一个默认构造函数
C
有一个用户定义的构造函数,因此不能保证生成了默认构造函数,特别是因为用户定义的构造函数重载了默认构造函数。几乎可以肯定的是,C的每个构造都使用用户定义的构造函数

在用户定义的
C
构造函数中,使用初始化列表初始化
C::m
。初始化
C::m
时,它是值初始化的,其中包括零初始化

新的A
ab是默认的初始化。这不会设置为其成员指定任何值。
A::m
中存储的值是未定义的行为


newa()
A c{}是值初始化。作为值初始化的一部分,它执行零初始化。

您能提供您正在引用的cppreference.com页面吗?您的命名非常简单confusing@JohnathanGross我已经用一个链接更新了原始帖子,该帖子引用了cppreferencea和c中的相关部分,这是值初始化的示例b和d是默认初始化的示例,它对可构造的类型不起任何作用,例如“C有一个用户定义的构造函数,因此不能保证生成了默认构造函数”。实际上,可以保证默认构造函数不会隐式生成。
(Scenario 1)
    0 
    -1771317376
    -1771317376
    0
    --------------------
(Scenario 2)
    0
    0
    0
    0