全域物件沒有在main函式之前進行初始化,
在呼叫全域物件完畢之后才開始執行建構式
舉個例子:
class testclass
{
public:
testclass()
{
dbg_print("new testclass");
}
void test()
{
dbg_print("test");
}
};
testclass tac;
int main()
{
tac.test();
}
結果輸出:
test
new testclass
希望有大佬能幫忙解決
uj5u.com熱心網友回復:
你這個例子的結果絕對是 new tastclass在前,不可能是你那種輸出結果uj5u.com熱心網友回復:
代碼太少。另外全域物件在什么地方初始化的?uj5u.com熱心網友回復:
我測驗正確
uj5u.com熱心網友回復:
你這個跟dbg有關吧?如果用標準輸入輸入完全沒有問題

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
這只是簡單的例子,我正在開發的專案中就出現了這種情況,用gdb斷點除錯,測出來確實是我說的這種結果,成員函式先執行,物件再初始化,非常的奇怪uj5u.com熱心網友回復:
平臺是ubuntu 20.04uj5u.com熱心網友回復:
應該是沒有正確的輸出導致你認為物件沒有構造,偷偷告訴你一個方法可以測驗物件有沒有構造成功:class testclass
{
public:
testclass():i(100)
{
dbg_print("new testclass");
}
void test()
{
dbg_print("test");//在這里輸出i的值,如果沒有構造物件,輸出i的時候一定會報錯。
}
private:
int i;
};
testclass tac;
int main()
{
tac.test();
}
uj5u.com熱心網友回復:
#include <stdio.h>
class testclass
{
public:
testclass()
{
printf("%s:%-4d %p new testclass\n",__FILE__,__LINE__,this);
}
void test()
{
printf("%s:%-4d %p test\n",__FILE__,__LINE__,this);
}
};
testclass tac;
int main()
{
tac.test();
return 0;
}
// test.cpp:7 00A93374 new testclass
// test.cpp:11 00A93374 test
用上面方法確定是同一段源代碼同一個類的實體輸出?
uj5u.com熱心網友回復:
8樓的方法是對的,你在main函式里根本測不出來。在類的構造里面直接輸出就行了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/9542.html
標籤:C++ 語言
