具有空初始化的构造函数初始化列表

Baz*_*Baz 7 c++

_currentHandle()在下面是什么意思?

template<class SpiHandleT>
class SpiHandleIterator : public ISpiHandleIterator<SpiHandleT>
{
public:
    SpiHandleIterator() : _currentHandle()
    {
    }
    ...
protected:
    SpiHandleT _currentHandle;
};
Run Code Online (Sandbox Code Playgroud)

ild*_*arn 21

这称为值初始化.从C++ 03标准,§8.5/ 7:

初始值为空集括号的对象,即(),应进行值初始化.

从§8.5/ 5开始:

值初始化类型的对象T意味着:

  • if T是具有用户声明的构造函数的类类型,然后T调用默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);
  • 如果T是没有用户声明的构造函数的非联合类类型,则每个非静态数据成员和基类组件T都是值初始化的;
  • 如果T是数组类型,则每个元素都是值初始化的;
  • 否则,该对象被零初始化

零初始化的类型的对象T是指:

  • 如果T是标量类型,则将对象设置为0(零)转换为的值T;
  • 如果T是非联合类类型,则每个非静态数据成员和每个基类子对象都是零初始化的;
  • if T是一个联合类型,该对象的第一个命名数据成员)是零初始化的;
  • if T是数组类型,每个元素都是零初始化的;
  • 如果T是引用类型,则不执行初始化.

所以在你的情况下,它取决于SpiHandleT:

  • 如果它是标量,它将被零初始化
  • 如果它是没有用户声明的构造函数的类类型,则其子对象将(递归地)进行值初始化
  • 如果它是具有用户声明的构造函数的类类型,则它将是默认构造的