为何C++类定义后声明的变量a会在main函数执行前调用构造函数
问题解答
语法逻辑说明
你疑惑的核心是C++的类定义语法和全局对象初始化规则,这两个点结合起来就产生了你看到的运行结果:
- 首先,C++支持在类/结构体的定义闭合花括号后,直接声明该类型的变量,你贴的代码里
} a;的写法,和下面的写法完全等价:
class Test { public: Test() { cout << "Hello from Test() "; } }; Test a;
编译器看到a跟在Test类定义的后面,自然就知道a的类型是Test,不存在你以为的「只写了a没有加类名」的情况,它不是单独的声明语句,是类定义语句的一部分。
- 其次,C++没有
global关键字,这是其他语言(比如Python)的语法规则。只要变量定义在所有函数之外,默认就是全局作用域的变量,不需要额外声明。
执行顺序说明
全局作用域的类对象,会在main函数执行之前完成初始化,也就是调用对应的构造函数,所以你会先看到Hello from Test()的输出,再看到main函数里打印的Main Started,和题目给出的输出结果完全匹配。
内容的提问来源于stack exchange,提问作者Dudu Gvili
相关产品推荐
相关产品推荐

