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

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

跪求!c++中的static_cast轉(zhuǎn)換的問(wèn)題求大佬指點(diǎn)!

跪求!c++中的static_cast轉(zhuǎn)換的問(wèn)題求大佬指點(diǎn)!

溫溫醬 2019-10-10 17:49:25
int&&rri=42;int&&rri1=rri;rri是一個(gè)左值,rri1不能綁定一個(gè)左值。int&&rri1=static_cast(rri);但是為什么static_cast轉(zhuǎn)換后就可以了呢?static_cast轉(zhuǎn)換后的類型不還是int&&的嗎?
查看完整描述

2 回答

?
繁花不似錦

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

左值/右值是表達(dá)式的值的屬性,不是類型的屬性,不與類型一一對(duì)應(yīng)。它是由表達(dá)式的值的類型,與表達(dá)式的形式(得到這個(gè)值的過(guò)程)共同決定的。
//42的類型是int,這是一個(gè)int字面量,因而是右值
int&&rri=42;
inta=42;
//a的類型也是int,但它是一個(gè)變量,因而是左值
int&&rri2=a;//ERROR
//a+1的類型還是int,它是+運(yùn)算符的結(jié)果,為右值
int&&rri3=a+1;
rri本身作為一個(gè)表達(dá)式,是一個(gè)左值。
單獨(dú)由一個(gè)變量組成的表達(dá)式叫做id-expression(unqualified-id)。unqualified-id為函數(shù)、變量、類成員變量結(jié)果為左值;其它為右值(比如enumerator)。rri是一個(gè)變量,結(jié)果為左值。
8.1.4.1Unqualifiednames1)......Theexpressionisanlvalueiftheentityisafunction,variable,ordatamemberandaprvalueotherwise;......
static_cast(rri)的類型雖然與rri相同,但是它是一個(gè)右值。
static_cast(v),僅當(dāng)T為左值引用或?qū)瘮?shù)的右值引用時(shí),結(jié)果為左值。其余情況均為右值。
8.2.9Staticcast1)Theresultoftheexpressionstatic_cast(v)istheresultofconvertingtheexpressionvtotypeT.IfTisanlvaluereferencetypeoranrvaluereferencetofunctiontype,theresultisanlvalue;ifTisanrvaluereferencetoobjecttype,theresultisanxvalue;otherwise,theresultisaprvalue.......
C++標(biāo)準(zhǔn)里對(duì)每一種表達(dá)式形式,都詳細(xì)定義結(jié)果何時(shí)為左值、何時(shí)為右值。
引用來(lái)自C++17draftn4659
                            
查看完整回答
反對(duì) 回復(fù) 2019-10-10
?
UYOU

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

static_cast之所以可以是因?yàn)楸磉_(dá)式static_cast(rri)的valuecategory是xvalue。相比之下表達(dá)式rri是lvalue。這兩個(gè)表達(dá)式的類型相同,均為int。
引用初始化是否合法取決于被初始化的引用類型和用于初始化的表達(dá)式的類型以及它的valuecategory。valuecategory是表達(dá)式的一個(gè)屬性(也可以理解成所有表達(dá)式都可以按valuecategory歸為三類)。使用表達(dá)式的類型進(jìn)行分析時(shí),需要首先去掉它的所有引用,即如果直覺上某表達(dá)式的類型是int&&,那么分析時(shí)其類型要按int處理。
valuecategory一種有五種三種primarycategory:lvalue,prvalue,xvalue兩種mixedcategory:glvalue(lvalue,xvalue),rvalue(prvalue,xvalue)
只有prvalue或xvalue可以用于初始化右值引用,也就是rvalue。因此要確定一個(gè)表達(dá)式是否能初始化某個(gè)引用,我們需要確定這個(gè)表達(dá)式屬于哪個(gè)valuecategory。
int&&rri=42;\\表達(dá)式42是intrvalue(prvalue),可以初始化右值引用
int&&rri1=rri;\\表達(dá)式rri是intlvalue,不可以初始化右值引用
int&&rri2=static_cast(rri);\\表達(dá)式`static_cast(rri)`是intrvalue(xvalue),可以初始化右值引用
PS:更加完整的分析還要考慮到隱式轉(zhuǎn)換,但你給出的例子幾乎不涉及隱式轉(zhuǎn)換,這部分就略去了。
                            
查看完整回答
反對(duì) 回復(fù) 2019-10-10
  • 2 回答
  • 0 關(guān)注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報(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)