繁体   English   中英

非 POD 的零初始化

[英]Zero initialization of non-POD

为什么在下面的非 POD 类中 x 被初始化为零?

class test {
public:
    void print() {
        cout << x << endl;
    }
private:
    int x;
};

int main(int argc, char** argv)
{
    test * tst = new test();
    tst->print();
    cout << is_pod<test>::value << endl;
}

tst->print() 和 is_pod() 都返回 0

这是在没有用户提供的构造函数的情况下对类进行值初始化的结果。

在这种情况下, T ()new T ()进行零初始化:

如果T是具有既不是用户提供也不是删除的默认构造函数的类类型(即,它可能是具有隐式定义或默认默认构造函数的类),则对象被零初始化,然后它是默认的-如果它有一个非平凡的默认构造函数,则初始化;

零初始化的影响是:

如果T是非联合类类型,则所有基类和非静态数据成员都初始化为零,并且所有填充都初始化为零位。 构造函数(如果有)将被忽略。

如果T是标量类型,则对象的初始值是显式转换为T的整数常量零。

暂无
暂无

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

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