2016-09-10 191 views
2

引用的唯一目的是別名。將一個引用(引用一個常量int)分配給一個整數看起來很荒謬,因爲它不是一個別名(並且它不會給出錯誤!)。我想這與定義一個常量int類似。有什麼區別嗎?const int&x = 4和const int x = 4之間的區別

+0

*區別*在哪個意義上?從語言角度來看,*有*差異。實際上,這種特殊情況沒有區別。 – Nawaz

+0

上下文很重要。這是否是一個正式的論點? –

回答

2

在函數體或文件範圍內,唯一的區別是decltype(x)。在一種情況下,它是int const,另一種是int const&

const int & x=7;創建一個臨時匿名int,其值爲7。然後它綁定一個參考x它。臨時的壽命延長至參考值的壽命。這與x基本沒有區別,的值爲7

與它幾乎完全相同的一個例外是當綁定發生在對象的構造函數中作爲成員初始化的一部分時。在這種情況下,壽命不會延長。

我懷疑你可以誘發本:

struct Foo{ 
    int const& x=7; 
    Foo(){}; 
}; 

無論是上面的語法是非法的,或者懸(如果在引用標準角落情況下,我不記得),而:

struct Foo{ 
    int const x=7; 
    Foo(){}; 
}; 

既合法又不懸垂。所以有區別。

作爲函數的參數也會有所不同,因爲=7只是提供了一個默認值。

相關問題