2013-11-21 52 views
1

我會在下面的例子中什麼的和存在意味着的const_cast模板參數

const int a = 12; 
int b; 
b = const_cast<int&>(a); 

,我想知道上面是什麼&模板參數類型表示,爲什麼它不會不&工作?

更新:

讓我改一下我的問題。我瞭解它的一個參考,但它指的是什麼變量?例如here它說明指針指向它引用原始(uncast)指針。我想知道它是什麼引用了非指針類型,並且它在沒有聲明爲引用時如何可以引用它?

+0

如果你不認識一個引用,你應該退後一步,閱讀一個好的初學者C++好的/教程。 – 2013-11-21 16:18:07

+0

其意義在於...等待它...... **參考!** – 2013-11-21 16:24:01

+0

讓我重新說明我的問題。我知道它是一個參考,但它指的是什麼變量?例如,在msdn.microsoft.com/en-us/library/bz6at95h%28v=vs.110%29.aspx中,它指出它指向它引用原始(uncast)指針的指針。我想知道它指的是什麼非指針類型 – MistyD

回答

3

const_cast不是一個模板,而是一個類型轉換。似乎是模板參數的是演員的目標類型,在這種情況下,這意味着您想要獲得對int的非常量引用,該引用指向與a相同的對象。

+0

所以目的地類型是一個參考,那麼我是否正確?如果是的話,它是什麼?是在內存中創建的臨時對象嗎?我用指針和http://msdn.microsoft.com/en-us/library/bz6at95h%28v=vs.110%29.aspx指出它引用原始(uncast)指針。我想知道什麼會發生非指針 – MistyD

+0

@MistyD:它引用作爲演員參數的對象。 –

+0

當我將它聲明爲int b而不是int&b時,我仍然對它的引用感到困惑 – MistyD

1

aconst int&當您按照您的要求編寫const_cast時。

只能使用const_cast修改指針和引用類型的cv限定符,而不是值。這是因爲爲rval指定常量只有在引用或指針類型是有意義的,因此才能修改。

所以,如果你只是想變a的(非const)值,只需編寫

b = a; 

爲常量性被忽略反正。然後從a複製構建b

+1

*常量被忽略的值*?你可能想進一步解釋你的意思,因爲它是不正確的 –

+0

@DavidRodríguez-dribeas我糾正它爲「右值」,這是正確的嗎?我的意思是,當我在表達式中使用const值(rvalue?)時,它的常量無關緊要。只有當我嘗試分配給它時(左值?)。但也許我不知道這個正確的術語。 – leemes

+0

在你寫的第一行'a是const int&'你能否說出這意味着什麼?因爲我的代碼有'const int' – MistyD

0

基本上是一個常量是,B不是常量

這樣的const_cast基本上說b爲存儲在但是移除常量。