Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
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它与编译器有关吗?
f_A
f_B
f_C
这将是施工的相反顺序。这是由 C++ 标准指定的。
C++ 标准指定了顺序。
第 6.7/2 段:
每次执行声明语句时都会初始化具有自动存储持续时间 (3.7.3) 的变量。在块中声明的具有自动存储持续时间的变量在退出块时被销毁(6.6)。
这意味着构造顺序与上面源代码中列出的变量顺序相同,这很重要,因为...
第 6.6/2 段:
从范围退出时(无论如何完成),已在该范围内构建的具有自动存储持续时间 (3.7.3) 的对象将按其构建的相反顺序销毁。