簡體   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