9

_currentHandle() 下面是什么意思?

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

1 回答 1

25

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

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

从 §8.5/5 开始:

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

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

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

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

因此,在您的情况下,这取决于以下定义SpiHandleT

  • 如果它是一个标量,它将被零初始化
  • 如果它是一个没有用户声明的构造函数的类类型,它的子对象将(递归地)值初始化
  • 如果它是具有用户声明的构造函数的类类型,它将是默认构造的
于 2012-06-22T21:31:58.577 回答