相关疑难解决方法(0)

822
推荐指数
10
解决办法
35万
查看次数

是否未明确指定未初始化的数据行为?

注意:我正在使用g ++编译器(我听说这是非常好的,并且应该非常接近标准).


我有一个我能想到的最简单的课程:

class BaseClass  {
  public:
    int pub;
};
Run Code Online (Sandbox Code Playgroud)

然后我有三个同样简单的程序来创建BaseClass对象并打印出他们数据的[未初始化]值.


情况1

BaseClass B1;
cout<<"B1.pub = "<<B1.pub<<endl;
Run Code Online (Sandbox Code Playgroud)

打印出:

B1.pub = 1629556548
Run Code Online (Sandbox Code Playgroud)

哪个好.我实际上认为它会被初始化为零,因为它是POD或Plain Old Datatype或类似的东西,但我想不是吗?到现在为止还挺好.


案例2

BaseClass B1;
cout<<"B1.pub = "<<B1.pub<<endl;
BaseClass B2;
cout<<"B2.pub = "<<B2.pub<<endl;
Run Code Online (Sandbox Code Playgroud)

打印出:

B1.pub = 1629556548
B2.pub = 0
Run Code Online (Sandbox Code Playgroud)

这绝对是奇怪的.我以相同的方式创建了两个相同的对象.一个被初始化而另一个没有.


案例3

BaseClass B1;
cout<<"B1.pub = "<<B1.pub<<endl;
BaseClass B2;
cout<<"B2.pub = "<<B2.pub<<endl;
BaseClass* pB3 = new BaseClass;
cout<<"B3.pub = "<<pB3->pub<<endl;
Run Code Online (Sandbox Code Playgroud)

打印出:

B1.pub = 0
B2.pub = 0
B3.pub = 0
Run Code Online (Sandbox Code Playgroud)

这是最奇怪的.它们都被初始化为零.我所做的只是添加两行代码,它改变了以前的行为.


那么这只是"未初始化的数据导致未指明的行为"的情况,还是"引擎盖下"更合乎逻辑?

我真的想了解默认的构造函数/析构函数行为,因为我觉得完全理解继承的东西非常重要.

c++ initialization

6
推荐指数
1
解决办法
1133
查看次数

标签 统计

c ×1

c++ ×1

c++-faq ×1

declaration ×1

definition ×1

initialization ×1

terminology ×1