[英]How does std::chrono::duration default constructed?
cppreference.com说The default constructor is defaulted
。 我还检查了C++14 draft
,它对默认构造函数什么也没说,除了声明: constexpr duration() = default;
当我运行以下代码时,我感到很惊讶。
chrono::seconds s;
cout << s.count() << endl;
每次我运行它时,程序都会打印一些任意数字: 140737364037104
、 140737078676496
等等。
似乎s
没有很好地初始化。 然后我检查了我的编译器(GCC 4.8)的std::chrono::duration
。 这个类有一个 int 类型的数据成员(即count
),没有任何类内初始化程序。 并且构造函数是默认构造的。 所以数据成员实际上是未初始化的。 这就是程序总是打印一些任意数字的原因。
以下是我的问题:
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.