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 關注
- 435 瀏覽
添加回答
舉報