std :: chrono :: duration默认是如何构造的?

时间:2017-09-25 10:24:33

标签: c++ c++11 chrono

cppreference.comimport { shallow } from 'enzyme' import Accordion from './components/Accordion' test('Accordion component', () => { const component = shallow(<Accordion name={`Main`}/>) expect(component.state('activeTab')).equals(0) }) 。我还检查了The default constructor is defaulted,它在默认构造函数上没有说什么,除了声明:C++14 draft

当我运行以下代码时,我感到很惊讶。

constexpr duration() = default;

每次运行时,程序都会打印一些任意数字:chrono::seconds s; cout << s.count() << endl; 140737364037104等等。

似乎140737078676496没有很好地初始化。然后我检查了s的编译器(GCC 4.8)的实现。该类具有int类型的数据成员(即std::chrono::duration),没有任何类内初始化程序。构造函数是默认构造的。因此,数据成员实际上是未初始化的。这就是程序总是打印一些任意数字的原因。

以下是我的问题:

  1. 这是正确的行为吗?或者编译器应该为数据成员提供一个类内初始化程序?
  2. 如果这是正确的行为,为什么标准不为count指定默认值,比如说0

1 个答案:

答案 0 :(得分:2)

由于优化,默认构建的持续时间不会初始化为零。

ISO C++ Discussion的同一问题中引​​用 Vicente J. Botet Escriba

  

嗨,我想是遵循这样的模式,不要为你不能使用的东西买单,   但霍华德会更好地解释它。

     

如果您希望将表示默认初始化为零,那么您   可以提供一个那样做

     

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

首席设计师和<chrono>时间工具的作者( Howard Hinnant )确认并进一步解释