默认初始化积分成员是否首选空初始值设定项?

def*_*ode 5 c++ ctor-initializer

我刚刚看了一个由GMAN评论

class A
{
public:
   A() :
      m_ptr() // m_ptr is implicitly initialized to NULL
   { }
};
Run Code Online (Sandbox Code Playgroud)

应该优先考虑

class A
{
public:
   A() :
      m_ptr(NULL) // m_ptr is explicitly initialized to NULL
   { }
};
Run Code Online (Sandbox Code Playgroud)

请注意NULL第一个示例中缺少的内容.

GMan对吗?这可能有点主观,所以"你更喜欢空的初始化器进行默认初始化吗?" 可能更合适.

此外,如果您更喜欢空的初始化器,这是否适用于其他整体成员?

class B
{
public:
   B() :
      m_count(),
      m_elapsed_secs()
   {}
private:
   std::size_t m_count;
   float m_elapsed_secs;  //the elapsed time since instantiation
};
Run Code Online (Sandbox Code Playgroud)

当然,请捍卫您的观点,并说明为什么一个人应该优先于另一个.

jam*_*lin 7

我更喜欢显性.正如这个问题的一些错误答案已经证明的那样,对于每个人来说,并不是那么明显,int()并且int(0)是等同的.

我认为不提供显式值的优点是,如果您更改了类型,则无需重新访问初始化列表.