0

C++程序是这样的:

class Foo
{ 
    // something here
};

int main ()
{
     Foo f_A;
     Foo f_B;
     Foo f_C;
     //do something here

     return 0;
}

已经证明,在g++中f_A,which之前构造f_B,之后解构,之后f_B解构f_B。什么决定了顺序?f_C它与编译器有关吗?

4

2 回答 2

6

这将是施工的相反顺序。这是由 C++ 标准指定的。

于 2013-04-11T12:08:45.743 回答
5

C++ 标准指定了顺序。

第 6.7/2 段:

每次执行声明语句时都会初始化具有自动存储持续时间 (3.7.3) 的变量。在块中声明的具有自动存储持续时间的变量在退出块时被销毁(6.6)。

这意味着构造顺序与上面源代码中列出的变量顺序相同,这很重要,因为...

第 6.6/2 段:

从范围退出时(无论如何完成),已在该范围内构建的具有自动存储持续时间 (3.7.3) 的对象将按其构建的相反顺序销毁。

于 2013-04-11T12:10:20.833 回答