日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

隐式的类类型转化

發(fā)布時間:2024/10/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 隐式的类类型转化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

隱式的類類型轉(zhuǎn)換
如果構(gòu)造函數(shù)只接受一個實參,則它實際上定義了轉(zhuǎn)換為此類類型的隱式轉(zhuǎn)換機制,有時我們把這種構(gòu)造函數(shù)稱作轉(zhuǎn)換構(gòu)造函數(shù)

能通過一個實參調(diào)用的構(gòu)造函數(shù)定義了一條從構(gòu)造函數(shù)的參數(shù)類型向類類型隱式轉(zhuǎn)換的規(guī)則。

在Sales_data類中,接受string的構(gòu)造函數(shù)和接受istream&的構(gòu)造函數(shù)分別定義了從這兩種類型向Sales_data隱式轉(zhuǎn)換的規(guī)則。也就是說,在需要使用Sales_data的地方,我們可以使用string或者istream&作為代替:

string null_book="9-999-99999-9";
//構(gòu)造一個臨時的Sales_data對象
//該對象的units_sold和revenue等于0,bookNo等于null_book
item.combine(null_book);

在這里我們用一個string實參調(diào)用了Sales_data的combine成員。該調(diào)用是合法的,編譯器用給定的string自動創(chuàng)建了一個Sales_data對象。新生成的這個(臨時)Sales_data對象被傳遞給combine。因為combine 的參數(shù)是一個常量引用,所以我們可以給該參數(shù)傳遞一個臨時量。

只允許一步類類型轉(zhuǎn)換

編譯器只會自動地執(zhí)行一步類型轉(zhuǎn)換。例如,因為下面的代碼隱式地使用了兩種轉(zhuǎn)換規(guī)則,所以它是錯誤的:

//錯誤:需要用戶定義的兩種轉(zhuǎn)換:
//(1)把"9-999-99999-9"轉(zhuǎn)換成string
//(2)再把這個(臨時的)string轉(zhuǎn)換成Sales_data
item.combine("9-999-99999-9");

如果我們想完成上述調(diào)用,可以顯式地把字符串轉(zhuǎn)換成string或者Sales_data對象:

//正確:顯式地轉(zhuǎn)換成string,隱式地轉(zhuǎn)換成Sales_data
item.combine(string("9-999-99999-9"));
//正確:隱式地轉(zhuǎn)換成string,顯式地轉(zhuǎn)換成Sales_data
item.combine(Sales_data("9-999-99999-9"));

類類型轉(zhuǎn)換不總是有效

是否需要從string到Sales_data的轉(zhuǎn)換依賴于我們對用戶使用該轉(zhuǎn)換的看法:

//使用istream構(gòu)造函數(shù)創(chuàng)建一個函數(shù)傳遞給combine
item.combine(cin);

這段代碼隱式地把cin轉(zhuǎn)換成Sales_data,這個轉(zhuǎn)換執(zhí)行了接受一個istream的Sales_data構(gòu)造函數(shù)。該構(gòu)造函數(shù)通過讀取標(biāo)準(zhǔn)輸入創(chuàng)建了一個(臨時的)Sales_data對象,隨后將得到的對象傳遞給combine。
Sale_data對象是個臨時量,一旦combine完成我們就不能再訪問它了。實際上,我們構(gòu)建了一個對象,先將它的值加到item中,隨后將其丟棄。

抑制構(gòu)造函數(shù)定義的隱式轉(zhuǎn)換

在要求隱式轉(zhuǎn)換的程序上下文中,我們可以通過將構(gòu)造函數(shù)聲明為explicit加以阻止:

class Sales_data{
public :
Sales_data()=default;
Sales_data(const std::string &s,unsigned n,double p):bookNo(s),units_sold(n),revenue(n*p){}
explicit Sales_data(const std::string &s):bookNo(s){}
explicit Sales_data(std::istream&);
//其他成員與之前的版本一致
};

此時,沒有任何構(gòu)造函數(shù)能用于隱式地創(chuàng)建Sales_data對象,之前的兩種用法都無法通過編譯:

item.combine(null_book); //錯誤:string構(gòu)造函數(shù)是explicit的
item.combine(cin); //錯誤:istream構(gòu)造函數(shù)是explicit的

關(guān)鍵字explicit只對一個實參的構(gòu)造函數(shù)有效。需要多個實參的構(gòu)造函數(shù)不能用于執(zhí)行隱式轉(zhuǎn)換,所以無須將這些構(gòu)造函數(shù)指定為explicit的。只能在類內(nèi)聲明構(gòu)造函數(shù)時使用explicit關(guān)鍵字,在類外部定義時不應(yīng)重復(fù):

//錯誤:explicit關(guān)鍵字只允許出現(xiàn)在類內(nèi)的構(gòu)造函數(shù)聲明處
explicit Sales_data::Sales_data(istream& is){
read(is,*this);
}

explicit構(gòu)造函數(shù)只能用于直接初始化
發(fā)生隱式轉(zhuǎn)換的一種情況是當(dāng)我們執(zhí)行拷貝形式的初始化時(使用=)。此時,我們只能使用直接初始化而不能使用explicit構(gòu)造函數(shù):

//正確:實參是一個顯式構(gòu)造的Sales_data對象
item.combine(Sales_data(null_book));
//正確:static_cast可以使用explicit的構(gòu)造函數(shù)
item.combine(static_cast<Sales_data>(cin));

在第一個調(diào)用中,我們直接使用Sales_data的構(gòu)造函數(shù),該調(diào)用通過接受string的構(gòu)造函數(shù)創(chuàng)建了一個臨時的Sales_data對象。在第二個調(diào)用中,我們使用static_cast執(zhí)行了顯式的而非隱式的轉(zhuǎn)換。其中,static_cast使用istream構(gòu)造函數(shù)創(chuàng)建了一個臨時的Sales_data對象。

標(biāo)準(zhǔn)庫中含有顯式構(gòu)造后函數(shù)的類

我們用過的一些標(biāo)準(zhǔn)庫的類含有單參數(shù)的構(gòu)造函數(shù):
·接受一個單參數(shù)的const char*的string構(gòu)造函數(shù)不是explicit的。
·接受一個容量參數(shù)的vector構(gòu)造函數(shù)是explicit的。

轉(zhuǎn)載于:https://www.cnblogs.com/CharlesNels/p/9555807.html

總結(jié)

以上是生活随笔為你收集整理的隐式的类类型转化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩国产色 | 国产精品白嫩白嫩大学美女 | 亚洲伦理一区二区三区 | 懂色一区二区三区免费观看 | 色综合狠狠爱 | 亚洲av男人的天堂在线观看 | 成人免费在线视频观看 | 自拍偷拍色图 | 中文字幕在线观看免费高清 | 日本xxxx18| 国产中文字幕二区 | 四虎影视免费永久观看在线 | 国产女人在线观看 | 狠狠插av| 99久精品视频 | v片在线看 | 国产色婷婷 | 可以免费看的黄色 | 国产成人免费片在线观看 | 黑人欧美一区二区三区 | 超碰国产在线观看 | 人人看超碰| 日本黄色精品 | 偷拍久久久 | 欧美色999 | 国产成人精品综合在线观看 | 中文字幕你懂的 | 日本一区二区三区电影在线观看 | 中文字幕日韩欧美一区二区 | 风韵少妇spa私密视频 | 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 色屁屁在线 | 日韩有码第一页 | 新版天堂资源中文8在线 | 日日夜夜免费精品 | 夜夜嗷| 欧美人与按摩师xxxx | 午夜寂寞影院在线观看 | 亚洲成人网在线观看 | 超碰97国产在线 | 爱的色放在线 | 在线免费观看国产 | 欧美黑人性受xxxx精品 | 日韩av资源网 | 国产一二三四五区 | av55 | 免费高清av在线看 | 自拍偷拍小视频 | 在线成人欧美 | 在线观看9.1 | 特级一级片 | 午夜一区二区三区在线 | 国产精品视频亚洲 | 夜夜爽夜夜叫夜夜高潮漏水 | 亚洲 小说区 图片区 | 性爱一级视频 | 激情小说专区 | 亚洲欧美网 | 欧美精品在线一区二区 | 亚洲无毛| 精品国精品国产自在久不卡 | 激情国产一区 | 欧美精品黑人猛交高潮 | 免费毛片基地 | 91高清无打码 | 亚洲激情免费视频 | 日日日网站 | 在线观看欧美亚洲 | 浪潮av色 | 欧美欧美欧美欧美 | 日韩av在线播放网址 | 中出在线观看 | 快播视频在线观看 | 日韩a级片在线观看 | 污污软件在线观看 | 99色国产 | 小视频在线看 | 午夜999| 91av免费在线观看 | 久久久久久九九九九 | 欧洲裸体片 | 特级淫片裸体免费看 | 天堂一区二区三区 | 久久久无码18禁高潮喷水 | 亚洲一卡二卡三卡 | 成年人黄色 | 国产一区黄 | 亚洲女女做受ⅹxx高潮 | 伊人22| 国产精品免费精品一区 | 国产精品短视频 | 日韩久久久精品 | 午夜网站视频 | 国产91色在线 | 欧美大片免费观看 | 欧美日韩精品在线观看 | 欧美视频三区 | 一区二区少妇 | 午夜福利理论片在线观看 | 国产不卡av在线播放 |