繁体   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