為什么非Const引用不能綁定到臨時(shí)對(duì)象?為什么不允許獲取對(duì)臨時(shí)對(duì)象的非Const引用,哪個(gè)函數(shù)getx()退貨?很明顯,這是C+標(biāo)準(zhǔn)所禁止的,但我對(duì)這種限制的目的感興趣,不是參考達(dá)到標(biāo)準(zhǔn)。struct X{
X& ref() { return *this; }};X getx() { return X();}void g(X & x) {} int f(){
const X& x = getx(); // OK
X& x = getx(); // error
X& x = getx().ref(); // OK
g(getx()); //error
g(getx().ref()); //OK
return 0;}很明顯,對(duì)象的生存期不能成為原因,因?yàn)閷?duì)象的持續(xù)引用是不受禁止C+標(biāo)準(zhǔn)。顯然,在上面的示例中,臨時(shí)對(duì)象不是常量,因?yàn)樵试S調(diào)用非常量函數(shù)。例如,ref()可以修改臨時(shí)對(duì)象。此外,ref()允許您欺騙編譯器,并獲得到這個(gè)臨時(shí)對(duì)象的鏈接,從而解決我們的問題。此外:他們說“將一個(gè)臨時(shí)對(duì)象分配給Const引用延長(zhǎng)了該對(duì)象的生存期”,并且“盡管沒有提到非Const引用”。我的附加問題。之后的賦值是否延長(zhǎng)了臨時(shí)對(duì)象的生存期?X& x = getx().ref(); // OK
為什么非Const引用不能綁定到臨時(shí)對(duì)象?
哆啦的時(shí)光機(jī)
2019-05-30 13:37:47