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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c++中的static_cast轉換的問題跪求!

c++中的static_cast轉換的問題跪求!

桃花長相依 2019-10-25 22:44:25
int&&rri=42;int&&rri1=rri;rri是一個左值,rri1不能綁定一個左值。int&&rri1=static_cast(rri);但是為什么static_cast轉換后就可以了呢?static_cast轉換后的類型不還是int&&的嗎?
查看完整描述

2 回答

?
HUH函數(shù)

TA貢獻1836條經驗 獲得超4個贊

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

TA貢獻1786條經驗 獲得超11個贊

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號