You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:06:00