即使没有构造类对象,为什么这个C++程序能够成功运行?

fre*_*015 5 c++

为什么即使不构造类对象,这个C++程序也能成功运行?我们来看下面的代码:

#include<iostream>

using namespace std;

class Dopey
{
  public:
    Dopey() {cout << "Dopey\n";}
};

class Bashful
{
  public:
    Bashful() { cout << "BashFul\n";}
    void f() { cout << " f \n";}
    int i;
};

class Sneezy
{
  public:
    Sneezy(int i) {cout << "copy int \n";}
    Sneezy(Bashful d) { cout << "copy Bashful\n";}
    Sneezy(Bashful* d) {d->f();d->i=100;} //How could this be correct without    
                                              //  constructing d !!!!!!!!
    Sneezy();
};

class Snow_White
{
  public:
    Snow_White();
    Dopey dopey;
    Sneezy sneezy;
    Bashful bashful;
  private:
    int mumble;
};

Snow_White::Snow_White() : sneezy(&bashful)
{
    mumble = 2048;
}

int main()
{

    Snow_White s;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序可以成功运行,cout如下:

Dopey
f
BashFul
Run Code Online (Sandbox Code Playgroud)

without constructing bashful,the f() could be invoked,为什么?当我将功能更改Snow_White::Snow_White()为以下内容时:

Snow_White::Snow_White() : sneezy(bashful)
{
    mumble = 2048;
}
Run Code Online (Sandbox Code Playgroud)

它也runs successfully without constructing bashful,cout如下:

Dopey
copy Bashful
Bashful
Run Code Online (Sandbox Code Playgroud)

任何口译将不胜感激!谢谢 !

Man*_*rse 6

您的程序具有未定义的行为,因为您bashful在构建之前正在访问它.