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
。此类具有count
int类型的数据成员(即),而没有任何类内初始化程序。并且构造函数是默认构造的。因此,数据成员实际上是未初始化的。这就是程序始终打印一些任意数字的原因。
以下是我的问题:
0
forstd::chrono::duration
呢?由于优化,默认构造的持续时间未初始化为零。
引用Vicente J. Botet Escriba的ISO C ++讨论中的同一问题:
嗨,我猜想是要遵循这种模式,不要为您不使用的东西付费,但是霍华德会更好地解释它。
如果您希望将表示形式默认初始化为零,则只需提供一个即可
std::chrono::duration<MyInt> d; // MyInt default constructor initialize the value to zero.
首席设计师兼<chrono>
时间工具作者(Howard Hinnant)对此进行了确认和进一步解释。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句