是std :: chrono :: duration默认初始化为0

问题描述 投票:2回答:3

下面的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;文档说默认构造函数是默认的。标准库代码...

c++ c++11 chrono
3个回答
1
投票

[同一文档指出Rep是“代表滴答数的算术类型”。 Arithmetic types是整数或浮点类型,在默认构造时,它们都具有不确定的值。如您所述,由于duration具有默认的默认构造函数,因此它确实必须产生不确定的值。


0
投票

duration的实现未在标准中指定,只有其必须提供的接口。默认构造函数没有明确声明内部状态将具有任何特定的值,因此您不能假定默认构造的持续时间将初始化为零。特定的实现可以这样做,并且对于用于_Rep的某些类型可以将其初始化为零,而对于其他类型则可以不进行初始化。


© www.soinside.com 2019 - 2024. All rights reserved.