對於以下片斷,爲什麼const_cast不會修改調用函數中的值?
#include <iostream>
using namespace std;
void fun(const int *p)
{
int *q = const_cast<int *>(p);
*q = *q * 10;
cout<<"q: "<<q<<"\t Value: "<<*q<<endl;
}
int main()
{
const int a = 10;
const int *z = &a;
fun(z);
cout<<"z: "<<z<<"\t"<<"Address of a: "<<&a<<endl;
cout<<"value at z: "<<*z<<"\t\t value in a: "<<a<<endl;
}
產生的輸出是
q: 0x7fff65910fcc Value: 100
z: 0x7fff65910fcc Address of a: 0x7fff65910fcc
value at z: 100 value in a: 10
爲什麼即使我試圖修改它在樂趣的值不被修改()?
a和指針z的地址是如何相同,但值是不同的?
它是一種未定義的行爲與const_cast?
請注意,編譯器可能要使用你給他關於常量性的信息來進行一些優化。(這是拍攝約常量性照顧的第二個原因,第一個是「不錯的代碼「告訴程序員它不會觸及你的數據) – leemes 2013-05-12 09:45:27