我有點糊塗了......關於C++類具有自我參考
這是爲什麼允許在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;
};
但是,這並不:
static int t = 0;
class A
{
public:
A() : m(t++)
{
cout << "C:" << m << endl;
}
A a; // <<<< ----- THIS line
int m;
};
第二個沒有按預期編譯(是的,我知道爲什麼它不編譯:在代碼A
仍然不完整)...
但是......第一個很好地編譯(並且完成它應該做的事情,例如:在諸如A a[10];
之類的語句上崩潰應用程序)。 A
是構造函數中的完整類型嗎?對於這種情況,我也可以指出一些C++標準條目嗎?
除了一個事實,即這個類型是不完整的,如果你被允許該成員,那麼A的大小將是無限的,並且構建將永遠不會返回。 – molbdnilo