繁体   English   中英

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

[英]Constructor initialization list with empty initialization

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

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

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

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

从§8.5/ 5开始:

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM