下面的d值是已初始化(大概为0)还是未初始化(不安全读取?
std::chrono::system_clock::duration d;
[Documentation表示默认构造函数为默认值。
std库代码似乎似乎建议将其初始化,因为int64_t最终是标量,而标量的默认初始化是未初始化。
我的理解正确吗?当std::chrono::system_clock::time_point
初始化为0时,这使我惊讶。
struct system_clock
{
typedef chrono::nanoseconds duration;
...
/// nanoseconds
typedef duration<int64_t, nano> nanoseconds;
...
template<typename _Rep, typename _Period>
struct duration
{
typedef _Rep rep;
typedef _Period period;
...
下面的d值是已初始化(大概为0)还是未初始化(不安全读取? std :: chrono :: system_clock :: duration d;文档说默认构造函数是默认的。标准库代码...
[同一文档指出Rep
是“代表滴答数的算术类型”。 Arithmetic types是整数或浮点类型,在默认构造时,它们都具有不确定的值。如您所述,由于duration
具有默认的默认构造函数,因此它确实必须产生不确定的值。
duration
的实现未在标准中指定,只有其必须提供的接口。默认构造函数没有明确声明内部状态将具有任何特定的值,因此您不能假定默认构造的持续时间将初始化为零。特定的实现可以这样做,并且对于用于_Rep
的某些类型可以将其初始化为零,而对于其他类型则可以不进行初始化。