Constructor initialization list with empty initialization

前端 未结 1 1811
没有蜡笔的小新
没有蜡笔的小新 2020-12-30 12:15

What does _currentHandle() mean below?

template
class SpiHandleIterator : public ISpiHandleIterator
{
public:
    S         


        
相关标签:
1条回答
  • 2020-12-30 12:44

    This is known as value-initialization. From the C++03 standard, §8.5/7:

    An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.

    And from §8.5/5:

    To value-initialize an object of type T means:

    • if T is a class type with a user-declared constructor, then the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
    • if T is a non-union class type without a user-declared constructor, then every non-static data member and base-class component of T is value-initialized;
    • if T is an array type, then each element is value-initialized;
    • otherwise, the object is zero-initialized

    To zero-initialize an object of type T means:

    • if T is a scalar type, the object is set to the value of 0 (zero) converted to T;
    • if T is a non-union class type, each nonstatic data member and each base-class subobject is zero-initialized;
    • if T is a union type, the object’s first named data member) is zero-initialized;
    • if T is an array type, each element is zero-initialized;
    • if T is a reference type, no initialization is performed.

    So in your case, it depends on the definition of SpiHandleT:

    • If it's a scalar, it will be zero-initialized
    • If it's a class type without a user-declared constructor, its subobjects will be (recursively) value-initialized
    • If it's a class type with a user-declared constructor, it will be default-constructed
    0 讨论(0)
提交回复
热议问题