一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

c – 未定義構(gòu)造函數(shù)的默認(rèn)值

 印度阿三17 2019-07-23

Bjarne寫道: –
對(duì)于類型T,T()是默認(rèn)值的表示法,由默認(rèn)構(gòu)造函數(shù)定義.
當(dāng)我們不聲明默認(rèn)構(gòu)造函數(shù)時(shí)會(huì)發(fā)生什么?例如

using namespace std;

class date{
    int n,m;
    public:
   int day(){return n;}
   int month(){return m;}
          };//no default constructor

int main()
{
     date any =date();
     cout<<any.month()<<endl;   
     cout<<any.day()<<endl;
return 0;

}

每次運(yùn)行程序時(shí),該程序的輸出為0和0.我沒有聲明任何默認(rèn)構(gòu)造函數(shù)然后為什么會(huì)退出默認(rèn)值,即0?

編輯-

    class date{
        int n,m;
        public:
        date (){
        m=1;}
       int day(){return n;}
       int month(){return m;}
     };

 int main()
  {
     date any =date();
     cout<<any.month()<<endl;   
     cout<<any.day()<<endl;
return 0;

}

在閱讀答案后,我提供了一個(gè)默認(rèn)構(gòu)造函數(shù),但現(xiàn)在n正在獲取垃圾值但是根據(jù)答案它應(yīng)該為0,因?yàn)閙是任何其他構(gòu)造函數(shù)都無法接觸的,并且它是值初始化,如答案中所述

解決方法:

您看到的行為是為您的班級(jí)定義的.

怎么&為什么行為定義明確?

規(guī)則是:
如果您沒有提供無參數(shù)構(gòu)造函數(shù),則編譯器會(huì)為您的程序生成一個(gè),以防您的程序需要一個(gè).
警告:
如果程序?yàn)轭惗x了任何構(gòu)造函數(shù),則編譯器不會(huì)生成無參數(shù)構(gòu)造函數(shù).

根據(jù)C標(biāo)準(zhǔn),可以通過3種方式初始化對(duì)象:

>零初始化
>默認(rèn)初始化&
>值初始化

當(dāng),類型名稱或構(gòu)造函數(shù)初始化程序后跟()時(shí),初始化是通過值初始化.

從而,

date any =date();
              ^^^

值初始化無名對(duì)象,然后將其復(fù)制到本地對(duì)象中,
??????而:

date any;

將是默認(rèn)初始化.

值初始化為任何構(gòu)造函數(shù)不可及的成員提供零的初始值.
在你的程序中,n和m超出任何構(gòu)造函數(shù)的范圍,因此初始化為0.

回答編輯問題:
在你編輯的情況下,你的類提供了一個(gè)無參數(shù)的構(gòu)造函數(shù)date(),它能夠(并且應(yīng)該)初始化成員n和m,但是這個(gè)構(gòu)造函數(shù)不會(huì)初始化兩個(gè)成員,所以在這種情況下,沒有零初始化需要place和對(duì)象中未初始化的成員具有Indeterminate(任意隨機(jī))值,此外,此臨時(shí)對(duì)象將復(fù)制到顯示show indeterminate成員值的任何對(duì)象.

對(duì)于Standerdese粉絲:
對(duì)象初始化的規(guī)則適當(dāng)?shù)囟x在:

C 03標(biāo)準(zhǔn)8.5 / 5:

To zero-initialize an object of type T means:
— if T is a scalar type (3.9), 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.

To default-initialize an object of type T means:
— if T is a non-POD class type (clause 9), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
— if T is an array type, each element is default-initialized;
— otherwise, the object is zero-initialized.

To value-initialize an object of type T means:
— if T is a class type (clause 9) with a user-declared constructor (12.1), 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

來源:https://www./content-4-347851.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    在线观看免费无遮挡大尺度视频| 国产精品乱子伦一区二区三区| 千仞雪下面好爽好紧好湿全文| 亚洲一区二区久久观看| 丝袜人妻夜夜爽一区二区三区| 夜色福利久久精品福利| 男人和女人干逼的视频| 久久精品色妇熟妇丰满人妻91| 国产一二三区不卡视频| 亚洲欧美日韩色图七区| 久久本道综合色狠狠五月| 成人免费观看视频免费| 久久热在线免费视频精品| 亚洲高清一区二区高清| 微拍一区二区三区福利| 精品人妻一区二区三区免费看| 国产成人精品国产亚洲欧洲| 99久久精品免费精品国产| 国产欧美精品对白性色| 国产精品久久三级精品| 男人和女人干逼的视频| 激情爱爱一区二区三区| 日韩中文字幕狠狠人妻| 国产av乱了乱了一区二区三区| 美女被草的视频在线观看| 色综合视频一区二区观看| 国产欧美日韩在线一区二区| 日韩中文字幕在线不卡一区| 麻豆欧美精品国产综合久久| 99久久免费中文字幕| 日本二区三区在线播放| 千仞雪下面好爽好紧好湿全文 | 在线免费观看黄色美女| 国产原创中文av在线播放| 亚洲一区二区久久观看| 国产精品十八禁亚洲黄污免费观看| 亚洲五月婷婷中文字幕| 欧美精品日韩精品一区| 中文字幕在线五月婷婷| 日韩国产欧美中文字幕| 国产一区二区三区不卡|