3 回答
TA贡献2037条经验 获得超6个赞
不,C ++在调用main之前做了很多事情来“设置环境”; 但是,main是C ++程序中“用户指定”部分的正式启动。
一些环境设置是不可控的(比如设置std :: cout的初始代码;但是,某些环境可以像静态全局块一样控制(用于初始化静态全局变量)。注意,因为你没有完整在main之前控制,您无法完全控制静态块初始化的顺序。
在main之后,您的代码在概念上“完全控制”程序,在某种意义上,您既可以指定要执行的指令,也可以指定执行它们的顺序。多线程可以重新排列代码执行顺序; 但是,你仍然可以控制C ++,因为你指定让代码段执行(可能)乱序。
TA贡献1816条经验 获得超4个赞
你正在错误地阅读这句话。
程序应包含一个名为main的全局函数,它是程序的指定开始。
该标准是为了标准的其余部分而定义“开始”一词。它并没有说在main
调用之前没有代码执行。它说程序的开始被认为是在功能上main
。
您的计划符合要求。在main启动之前,您的程序尚未“启动”。根据标准中“start”的定义,在程序“启动”之前调用构造函数,但这几乎不重要。代码很多被执行前main
被不断调用每一个程序,不只是这个例子。
出于讨论的目的,您的构造函数代码在程序的“开始”之前执行,并且完全符合标准。
TA贡献1853条经验 获得超18个赞
除非有主程序,否则您的程序将不会链接,因此不会运行。但是main()不会导致程序执行的开始,因为文件级别的对象具有预先运行的构造函数,并且可以在main()到达之前编写一个运行其生命周期的整个程序,并让main本身具有一个空的身体。
实际上要强制执行此操作,您必须拥有一个在main及其构造函数之前构造的对象来调用程序的所有流程。
看这个:
class Foo
{
public:
Foo();
// other stuff
};
Foo foo;
int main()
{
}
你的程序流程将有效地源于 Foo::Foo()
- 3 回答
- 0 关注
- 404 浏览
添加回答
举报