cppreference.com说The default constructor is defaulted
。我也检查了C++14 draft
,它在默认构造函数上什么都没说,除了声明:constexpr duration() = default;
如何构建std :: chrono :: duration默认值?
当我运行下面的代码时,我很惊讶。
chrono::seconds s;
cout << s.count() << endl;
我每次运行它,那么程序将打印一些任意的数字:140737364037104
,140737078676496
等。
看来s
没有很好的初始化。然后我检查了编译器(GCC 4.8)的std::chrono::duration
的实现。这个类有一个int类型的数据成员(即count
),没有任何类内初始化器。而构造函数是默认构造的。所以数据成员实际上是未初始化的。这就是为什么程序总是打印一些任意数字。
以下是我的问题:
- 这是妥当的行为吗?或者编译器应该给数据成员一个类内初始化器?
- 如果这是正确的行为,为什么标准NOT不指定
0
的默认值std::chrono::duration
?
什么问题?这与'int a;'没有区别。如果你理解了在这种情况下的默认初始化,那么你就明白了“持续时间”的情况。 –