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

时间:2012-06-22 21:29:38

标签: c++

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

template<class SpiHandleT>
class SpiHandleIterator : public ISpiHandleIterator<SpiHandleT>
{
public:
    SpiHandleIterator() : _currentHandle()
    {
    }
    ...
protected:
    SpiHandleT _currentHandle;
};

1 个答案:

答案 0 :(得分:20)

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

  

一个对象,其初始化程序是一组空的括号,即(),应进行值初始化。

来自§8.5/ 5:

  

value-initialize T类型的对象意味着:

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

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

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

因此,在您的情况下,它取决于SpiHandleT

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