欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何使用variant代替union

如何使用variant代替union,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司 - 成都棕樹電信機(jī)房,四川服務(wù)器租用,成都服務(wù)器租用,四川網(wǎng)通托管,綿陽服務(wù)器托管,德陽服務(wù)器托管,遂寧服務(wù)器托管,綿陽服務(wù)器托管,四川云主機(jī),成都云主機(jī),西南云主機(jī),成都棕樹電信機(jī)房,西南服務(wù)器托管,四川/成都大帶寬,機(jī)柜大帶寬,四川老牌IDC服務(wù)商

union(聯(lián)合體)和struct相似,也可以包含多個(gè)數(shù)據(jù)成員,但是不同的是同時(shí)只允許一個(gè)成員有效,因此經(jīng)常作為作為節(jié)約空間的類使用。考慮下面的代碼:

    union Uv {        int i;        double df;    };    Uv u1;    u1.i = 100;    std::cout << "u1.i=" << u1.i << std::endl;    std::cout << "u1.df=" << u1.df << std::endl;    u1.df = 122.0;    std::cout << "u1.i=" << u1.i << std::endl;    std::cout << "u1.df=" << u1.df << std::endl;

上述代碼首先聲明了一個(gè)包含兩個(gè)成員的聯(lián)合體,然后分別為兩個(gè)成員賦值。為了了解賦值之后每個(gè)成員的狀態(tài),在賦值之后又分別將兩個(gè)成員的值輸出,其結(jié)果如下:

u1.i=100  
u1.df=-9.25596e+61  
u1.i=0  
u1.df=122

u1.i=100u1.df=-9.25596e+61u1.i=0u1.df=122

從結(jié)果可以看到,為i賦值之后,i的值有效,而df無效;為df賦值之后,df值有效,而i無效。這件事本身符合union的定義,但問題是如果只是面對(duì)一個(gè)聯(lián)合體的對(duì)象,用戶沒有辦法知道那個(gè)成員的值是有效的。如果成員是指針或者對(duì)象,那么帶來的類型風(fēng)險(xiǎn)會(huì)更大。一般的做法是自己實(shí)現(xiàn)一個(gè)類,另外設(shè)置一個(gè)管理類型的數(shù)據(jù)成員,問題是可以解決,但是代價(jià)也不小。

這個(gè)問題可以使用C++17中引入的variant來解決。直接看代碼:

    std::variant<int, double> var{ 122.0 };    std::cout << var.index() << std::endl;    try {        int i = std::get<int>(var);    }    catch(const std::bad_variant_access & e) {        std::cout << e.what() << std::endl;    }

代碼首先構(gòu)建了一個(gè)包含int和double成員的variant變量,它的名稱為var,初值為double類型的122.0。這里variant會(huì)根據(jù)初始值的內(nèi)容自動(dòng)決定需要初始化那個(gè)成員。

初值設(shè)定完成之后,可以使用variant提供的index方法獲取當(dāng)前有效的成員索引。接下來故意在double有效的情況下獲取int成員的值,觀察會(huì)發(fā)生什么。結(jié)果如下:

1122bad variant access

 可以看到獲取double值的處理正常完成,而獲取int值的處理拋出了異常。我們也可以嘗試相反的情況:

  var = 100;  std::cout << var.index() << std::endl;  try {    std::cout << std::get<int>(var) << std::endl;    std::cout << std::get<double>(var) << std::endl;  }  catch (const std::bad_variant_access& e) {    std::cout << e.what() << std::endl;  }

結(jié)果如下:

0100bad variant access

這次是獲取int成員成功,獲取double成員時(shí)拋出異常。

從這段說明不難看出,有了variant之后,一切都變得簡(jiǎn)單又安全。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

網(wǎng)頁題目:如何使用variant代替union
網(wǎng)址分享:http://aaarwkj.com/article40/gjigeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站服務(wù)器托管、自適應(yīng)網(wǎng)站、網(wǎng)站維護(hù)、建站公司Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
日本高清区一区二区三区四区五区| 亚洲午夜天堂在线a毛片| 午夜视频在线观看91| 91人妻精品一区二区| 国产成人综合亚洲国产| 日本午夜一区二区在线观看| 国产免费很黄很色视频| 日韩中文字幕免费一区二区| 日韩精品在线第一视频| 日本免费一区二区三区等视频 | 国产一级内射在线视频| 日本高清区一区二区三区四区五区| 中国女人内射91熟女| 欧美日韩另类国产综合| 中午字幕久久亚洲精品| 福利一区福利二区视频| 欧美在线观看日韩精品| 国产精品国产三级国产av丨| 国产高清不卡一二三区| 日韩精品人妻一区二区免| 亚洲中文波霸中文字幕| 国产黄色av网站在线| 成年人正常性生活频率| 国产免费不卡午夜福利在线 | 亚洲综合偷拍欧美一区日韩| 91超碰在线观看中文| 粉嫩护士国产在线观看| 国产精品成人av在线| 亚洲av综合日韩精品久久| 视频一区二区视频三区| 熟女俱乐部五十路六十路 | 老熟妇仑乱换频一区二区| 日韩欧美国产精品专区| 人妻少妇亚洲精品视频| 亚洲精品熟女国产国产老熟女| 国产精品夫妇在线激情啪| 日本人妻伦理在线播放| 中文字幕在线一区国产精品| 国产成人亚洲精品午夜国产馆| 日本亚洲精品在线观看| 欧美一区日韩二区国产三区|