cppreference.com說The default constructor is defaulted
。我也檢查了C++14 draft
,它在默認構造函數上什麼都沒說,除了聲明:constexpr duration() = default;
如何構建std :: chrono :: duration默認值?
當我運行下面的代碼時,我很驚訝。
chrono::seconds s;
cout << s.count() << endl;
我每次運行它,那麼程序將打印一些任意的數字:140737364037104
,140737078676496
等。
看來s
沒有很好的初始化。然後我檢查了編譯器(GCC 4.8)的std::chrono::duration
的實現。這個類有一個int類型的數據成員(即count
),沒有任何類內初始化器。而構造函數是默認構造的。所以數據成員實際上是未初始化的。這就是爲什麼程序總是打印一些任意數字。
以下是我的問題:
- 這是妥當的行爲嗎?或者編譯器應該給數據成員一個類內初始化器?
- 如果這是正確的行爲,爲什麼標準NOT不指定
0
的默認值std::chrono::duration
?
什麼問題?這與'int a;'沒有區別。如果你理解了在這種情況下的默認初始化,那麼你就明白了「持續時間」的情況。 –