cppreference.com说:默认构造函数被默认化了
。我还查看了C++14草案
,除了声明:constexpr duration() = default;
外,对于默认构造函数没有任何说明。
当我运行以下代码时,我感到惊讶。
chrono::seconds s;
cout << s.count() << endl;
每次运行程序时,它都会打印一些任意的数字:
140737364037104
,140737078676496
等等。看起来
s
没有被很好地初始化。然后我检查了我的编译器(GCC 4.8)对于std::chrono::duration
的实现。这个类有一个int类型的数据成员(即count
),没有任何内部初始化器。构造函数是默认构造的。因此,数据成员实际上未初始化。这就是为什么程序总是打印一些任意数字的原因。以下是我的问题:
1. 这是正确的行为吗?或者编译器应该给数据成员一个内部初始化器吗? 2. 如果这是正确的行为,那么为什么标准没有为
std::chrono::duration
指定默认值,比如0
?
int a;
没有区别。如果你理解那种情况下的默认初始化,那么你就能理解duration
的情况。 - Kerrek SB