我有点困惑......
为什么在C++中允许这样做:
static int t = 0;
class A
{
public:
A() : m(t++)
{
cout << "C:" << m << endl;
if(t >= 5)
{
A a; // <<<< ----- THIS line
throw( a);
}
}
int m;
};
Run Code Online (Sandbox Code Playgroud)
但这不是:
static int t = 0;
class A
{
public:
A() : m(t++)
{
cout << "C:" << m << endl;
}
A a; // <<<< ----- THIS line
int m;
};
Run Code Online (Sandbox Code Playgroud)
第二个没有按预期编译(是的,我知道它为什么不编译:在代码中的那个点A
仍然是不完整的)...
但是......第一个编译得很好(并做了它应该做的事情,即:在类似的语句上崩溃应用程序A a[10];
).是A …