2014-12-26 34 views
3

爲什麼這個靜態斷言會激發?is_const <const int&> ::值爲false - 爲什麼?

static_assert(std::is_const<const int&>::value, "Pain"); 

將是真棒,以同時獲得句法(爲什麼實施將做到這一點)和語義推理(他們爲什麼會設計這種類型的特徵的界面做到這一點)。

我知道有可能拋出一個std::remove_reference調用來獲得預期的結果,但我不知道爲什麼這是必要的。

回答

5

const int&是對const int的參考。所以參考本身不是const

這有點讓人困惑,所以我打算用const int*來表示一個類比。這是指向const int的指針。但你可以修改它

const int a = 5, b = 7; 
const int* ptr = &a; 
ptr = &b; // pointer is modified 

所以指針不是const。 (const指針會改爲int* const

+0

然而,引用無法修改(使其引用其他內容),所以,或多或少,每個引用實際上都是'const'。 – 6502

+0

引用不能被反彈,因此它是_effectively_「const」,但與語義上的「const」不同。 –

+1

同意。要記住,你可以非正式地說「const引用不是const的引用」。你需要閱讀「const引用」,而不是「const」引用「,但這個術語的含義與這兩個單詞的組合完全不同。 –

相關問題