簡體   English   中英

std::chrono::duration 默認是如何構造的?

[英]How does std::chrono::duration default constructed?

cppreference.comThe default constructor is defaulted 我還檢查了C++14 draft ,它對默認構造函數什么也沒說,除了聲明: constexpr duration() = default;

當我運行以下代碼時,我感到很驚訝。

chrono::seconds s;
cout << s.count() << endl;

每次我運行它時,程序都會打印一些任意數字: 140737364037104140737078676496等等。

似乎s沒有很好地初始化。 然后我檢查了我的編譯器(GCC 4.8)的std::chrono::duration 這個類有一個 int 類型的數據成員(即count ),沒有任何類內初始化程序。 並且構造函數是默認構造的。 所以數據成員實際上是未初始化的。 這就是程序總是打印一些任意數字的原因。

以下是我的問題:

  1. 這是正確的行為嗎? 或者編譯器應該給數據成員一個類內初始化程序?
  2. 如果這是正確的行為,為什么標准沒有為std::chrono::duration指定默認值,比如0

由於優化,默認構造的持續時間不是零初始化。

ISO C++ 討論中的同一問題引用Vicente J. Botet Escriba

嗨,我想是遵循不為不使用的東西付費的模式,但霍華德會更好地解釋它。

如果您希望表示默認初始化為零,您可以只提供一個這樣做的

std::chrono::duration<MyInt> d; // MyInt default constructor initialize the value to zero.

<chrono>時間實用程序的首席設計師和作者 ( Howard Hinnant ) 確認並進一步解釋了這一點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM