构造函数初始化列表中使用空的初始化方式

9
以下代码中的_currentHandle()是什么意思?
template<class SpiHandleT>
class SpiHandleIterator : public ISpiHandleIterator<SpiHandleT>
{
public:
    SpiHandleIterator() : _currentHandle()
    {
    }
    ...
protected:
    SpiHandleT _currentHandle;
};
1个回答

27
这被称为值初始化。根据C++03标准,§8.5/7:

其初始化器是一组空括号,即()的对象,将进行值初始化。

而来自§8.5/5:

对于类型T, 值初始化的意义是:

  • 如果T是具有用户声明的构造函数的类类型,则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化无效);
  • 如果T是没有用户声明的构造函数的非联合类类型,则会对T的每个非静态数据成员和基类分量进行值初始化;
  • 如果T是一个数组类型,则每个元素都将进行值初始化;
  • 否则,该对象将进行零初始化

对于类型T, 零初始化的意义是:

  • 如果T是标量类型,则将对象设置为转换为T的值0(零);
  • 如果T是非联合类类型,则每个非静态数据成员和每个基类子对象都将进行零初始化;
  • 如果T是联合类型,则将初始化对象的第一个命名数据成员;
  • 如果T是数组类型,则每个元素都将进行零初始化;
  • 如果T是引用类型,则不执行初始化。
因此,在您的情况下,这取决于SpiHandleT的定义:
  • 如果它是标量,则将进行零初始化
  • 如果它是一个没有用户声明构造函数的类类型,则其子对象将被(递归地)进行值初始化
  • 如果它是具有用户声明构造函数的类类型,则将进行默认构造

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接