怪異的行爲我都知道,使用const_cast
一般是壞主意,但我玩了,我跨怪異的行爲,哪裏傳來:與const_cast會
兩個指針具有相同的地址值,但去的時候引用,給出不同的數據值。
有沒有人對此有過解釋?
代碼
#include <iostream>
int main()
{
const int M = 10;
int* MPtr = const_cast<int*>(&M);
(*MPtr)++;
std::cout << "MPtr = " << MPtr << " (*MPtr) = " << (*MPtr) << std::endl;
std::cout << " &M = " << &M << " M = " << M << std::endl;
}
輸出
MPtr = 0x7fff9b4b6ce0 (*MPtr) = 11
&M = 0x7fff9b4b6ce0 M = 10
或者,至少,爲什麼你只應該對實際上* not * const的變量使用'const_cast' ,但是你有一個指向指針的指針。 – Sneftel
const_cast是一個重要的工具,它存在的原因。你只需要知道它是什麼,才能正確使用它。 – shawn1874
當然這是有原因的 - 語言架構師(大部分時間,至少)不只是添加功能,因爲他們喜歡它。不過,我已經成功使用了C++約7年,而不需要使用const_cast。我的一位同事需要這樣做 - 因爲一些被聲明爲'const'的函數需要修改一個成員變量,所以使用const-cast來鑄造'this'是唯一的出路(重新定義函數將會是一個更糟糕的解決方案)。所以,「不應該用」對我來說很好。 –