for*_*ack 5 c++ c++11 c++-chrono
cppreference.com说The default constructor is defaulted。我还检查了C++14 draft,除了声明之外,它在默认构造函数上什么也没说:constexpr duration() = default;
当我运行下面的代码时,我感到很惊讶。
chrono::seconds s;
cout << s.count() << endl;
Run Code Online (Sandbox Code Playgroud)
每次运行它时,程序都会打印一些任意数字:140737364037104,140737078676496等等。
看来s初始化得不好。然后我检查了编译器(GCC 4.8)的std::chrono::duration. 该类有一个countint 类型的数据成员(即 ),没有任何类内初始值设定项。并且构造函数是默认构造的。所以数据成员实际上是未初始化的。这就是为什么程序总是打印一些任意数字。
以下是我的问题:
0, for std::chrono::duration?由于优化,默认构造的持续时间未初始化为零。
引用Vicente J. Botet Escriba在ISO C++ 讨论中同一问题中的内容:
嗨,我想遵循的模式是不为不使用的东西付费,但霍华德会更好地解释这一点。
如果您希望表示形式默认初始化为零,您可以只提供一个来实现这一点
std::chrono::duration<MyInt> d; // MyInt default constructor initialize the value to zero.
<chrono>首席设计师和时间实用程序的作者(Howard Hinnant)证实并进一步解释了这一点
| 归档时间: |
|
| 查看次数: |
6615 次 |
| 最近记录: |