第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

默認(rèn)構(gòu)造函數(shù)是否初始化內(nèi)置類型?

默認(rèn)構(gòu)造函數(shù)是否初始化內(nèi)置類型?

C++
手掌心 2019-07-31 15:32:10
默認(rèn)構(gòu)造函數(shù)是否初始化內(nèi)置類型?默認(rèn)構(gòu)造函數(shù)(由編譯器創(chuàng)建)是否初始化內(nèi)置類型?
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊

隱式定義(由編譯器)類的默認(rèn)構(gòu)造函數(shù)不初始化內(nèi)置類型的成員。


但是,您必須記住,在某些情況下,可以通過其他方式執(zhí)行類實(shí)例的初始化。不是默認(rèn)構(gòu)造函數(shù),也不是構(gòu)造函數(shù)。


例如,有一種普遍的錯(cuò)誤信念,即對(duì)于類C,語(yǔ)法C()總是調(diào)用默認(rèn)構(gòu)造函數(shù)。但實(shí)際上,語(yǔ)法C()執(zhí)行所謂 的類實(shí)例的值初始化。如果是用戶聲明的,它只會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù)。(那是在C ++ 03中。在C ++ 98中 - 只有當(dāng)類是非POD時(shí))。如果類沒有用戶聲明的構(gòu)造函數(shù),那么C()它將不會(huì)調(diào)用編譯器提供的默認(rèn)構(gòu)造函數(shù),而是執(zhí)行一種特殊的初始化,它根本不涉及構(gòu)造函數(shù)C。相反,它將直接初始化類的每個(gè)成員。對(duì)于內(nèi)置類型,它會(huì)導(dǎo)致零初始化。


例如,如果您的類沒有用戶聲明的構(gòu)造函數(shù)


class C { 

  int x;

};

然后編譯器將隱式提供一個(gè)。編譯器提供的構(gòu)造函數(shù)將不執(zhí)行任何操作,這意味著它不會(huì)初始化C::x


C c; // Compiler-provided default constructor is used

// Here `c.x` contains garbage

然而,以下初始化將零初始化,x因?yàn)樗鼈兪褂蔑@式()初始化器


C c = C(); // Does not use default constructor for `C()` part

           // Uses value-initialization feature instead

assert(c.x == 0);


C *pc = new C(); // Does not use default constructor for `C()` part

                 // Uses value-initialization feature instead

assert(pc->x == 0);

()初始化程序的行為在C ++ 98和C ++ 03之間在某些方面是不同的,但在這種情況下不是這樣。對(duì)于上面的類C,它將是相同的:()初始化器執(zhí)行零初始化C::x。


在不涉及構(gòu)造函數(shù)的情況下執(zhí)行的初始化的另一個(gè)示例當(dāng)然是聚合初始化


C c = {}; // Does not use any `C` constructors at all. Same as C c{}; in C++11.

assert(c.x == 0);


C d{}; // C++11 style aggregate initialization.

assert(d.x == 0);


查看完整回答
反對(duì) 回復(fù) 2019-07-31
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

出于所有實(shí)際目的 - 沒有。


但是,對(duì)于技術(shù)上符合C ++標(biāo)準(zhǔn)的實(shí)現(xiàn),答案是它取決于對(duì)象是否是POD以及如何初始化它。根據(jù)C ++標(biāo)準(zhǔn):


MyNonPodClass instance1;//built in members will not be initialized

MyPodClass instance2;//built in members will be not be initialized

MyPodClass* instance3 = new MyPodClass;//built in members will not be initialized

MyPodClass* instance3 = new MyPodClass() ;//built in members will be zero initialized

但是,在現(xiàn)實(shí)世界中,這并沒有得到很好的支持,所以不要使用它。


標(biāo)準(zhǔn)的相關(guān)部分是第8.5.5和8.5.7節(jié)


查看完整回答
反對(duì) 回復(fù) 2019-07-31
?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊

我不太確定你的意思,但是:


struct A { int x; };


int a; // a is initialized to 0

A b;   // b.x is initialized to 0


int main() {

    int c;         // c is not initialized

    int d = int(); // d is initialized to 0


    A e;           // e.x is not initialized

    A f = A();     // f.x is initialized to 0

}

在我說(shuō)“未初始化”的每種情況下 - 您可能會(huì)發(fā)現(xiàn)編譯器為其提供了一致的值,但標(biāo)準(zhǔn)并不要求它。


包括我在內(nèi)的很多揮手問題都是關(guān)于內(nèi)置類型“有效”的默認(rèn)構(gòu)造函數(shù)。實(shí)際上,默認(rèn)初始化和值初始化是標(biāo)準(zhǔn)中定義的術(shù)語(yǔ),我個(gè)人每次都必須查找。只有標(biāo)準(zhǔn)中定義的類才具有隱式默認(rèn)構(gòu)造函數(shù)。


查看完整回答
反對(duì) 回復(fù) 2019-07-31
  • 3 回答
  • 0 關(guān)注
  • 651 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)