2014-03-03 99 views
1

我覺得好奇的是,const_cast不允許將一個右值(例如一個臨時變量)轉換爲一個const限定的引用,儘管static_cast可以很好地工作。有沒有人有解釋爲什麼這樣表現?const_cast一個右值const const

const_cast< const std::string & >(std::string("hello")); // doesn't compile 
static_cast< const std::string & >(std::string("hello")); // compiles 

請讓我們不要進入「的const_cast是邪惡的」的說法,我想在這裏做的是正確理解C++標準與const_cast會和右值處理的部分。

回答

3

const_cast被指定做非常具體的事情。它可以將左值轉換爲左值引用和右值引用右值。它可以在指針之間進行轉換。它不能從右值轉換爲左值引用,即使是一個常量值。請閱讀5.2.11瞭解演員能夠做什麼的確切內容;那一節沒有列出,它不能這樣做。

static_cast可以做其他事情,如5.2.9所列。其中,它可以從右值轉換爲左值引用const。

+0

謝謝,我覺得讓我感到困惑的部分是,我不知何故預計演員陣容會造成一個右值。 – Drealmer

1

const_cast只能添加或刪除const。而已。它不能做任何其他轉換(包括從你的代碼示例涉及的左值到const左值引用)。