对于问题的尴尬措辞感到抱歉,但我不确定如何用文字更好地描述它,所以我试试一个例子
Sub HideN()
Dim RowCnt As Long
Dim BeginRow&, EndRow&, ChkCol&
BeginRow = 8
EndRow = 232
ChkCol = 6
For RowCnt = BeginRow To EndRow
Rows(RowCnt).Hidden = Cells(RowCnt, ChkCol).Value = 0
Next RowCnt
End Sub
构建struct A {
A* a;
A() {a = new A[2];}
~A() {delete[] a;}
}
int main() {
A aa;
}
后,aa
内部*a
将分配一个包含两个struct A
对象的数组。但在我看来,这些对象中的每一个反过来都会因默认构造函数而创建自己的A
个对象数组,并在一个看似无穷无尽的循环中依次开启。我是否正确地想到这一点?
答案 0 :(得分:2)
我认为这是正确的吗?
是。构造函数是递归调用的,并且您可能会在某些时候耗尽动态存储空间或溢出调用堆栈。
答案 1 :(得分:2)
是的,你是绝对正确的。您的代码有效地在其内部嵌入了一组对象。从本质上讲,你使这个变得不可能struct
:
struct A {
A a[2]; // Impossible
};
您的代码通过使用指针来绕过编译器的检查,因此代码会因为无限递归而在运行时崩溃。
如果您想A
引用两个A
,请选择两个指针。