代码之家  ›  专栏  ›  技术社区  ›  for_stack

std::chrono::duration default是如何构造的?

  •  3
  • for_stack  · 技术社区  · 7 年前

    cppreference.com The default constructor is defaulted C++14 draft ,除了声明之外,它没有对默认构造函数进行任何说明: constexpr duration() = default;

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

    每次我运行它时,程序都会打印一些任意数字: 140737364037104 , 140737078676496

    看来 s std::chrono::duration . 此类有一个数据成员(即 count )不带任何类内初始值设定项的int类型。构造函数是默认构造的。因此,数据成员实际上是未初始化的。这就是为什么程序总是打印一些任意数字。

    1. 这是正确的行为吗?或者编译器应该给数据成员一个类内初始值设定项?
    2. 0 对于 标准::时间::持续时间 ?
    1 回复  |  直到 7 年前
        1
  •  5
  •   Outshined    7 年前

    由于优化,默认构造的持续时间未初始化为零。

    引用 Vicente J.Botet描述 来自同一个问题 ISO C++ Discussion :

    嗨,我想是要遵循这个模式,不用付钱, 但霍华德会解释得更好。

    如果希望表示形式默认初始化为零,则可以 可以提供一个这样做

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

    这一点得到了首席设计师和 <chrono> 时间实用程序( 霍华德·希南特 )