這是更多的學術問題,因爲我知道通常要避免const_cast
。是否可以在數組上使用const_cast來更改元素?
但是我正在研究第3章#27的Thinking in C++,Vol。 1.
創建一個double的double數組和一個volatile的volatile數組。通過每個數組索引 並使用const_cast分別將每個元素轉換爲非常量和非揮發性的 ,併爲每個元素分配一個值。
我看到如何const_cast
單瓦爾:
const int i = 0;
int* j = const_cast<int*>(&i);
*j = 1; // compiles and runs
但無法弄清楚如何得到它與一個陣列工作。以下編譯,但會引發'訪問不良'異常,就好像const
仍然存在。
const int sz = 10;
const double cd[sz] {0,1,2,3,4,5,6,7,8,9};
volatile double vd[sz] {0,1,2,3,4,5,6,7,8,9};
double* cdp = const_cast<double*>(cd);
double* vdp = const_cast<double*>(vd);
cdp[0] = 99; // bad access error
我哪裏錯了?
您不能修改常量。對編譯器說謊並不能使它工作。 – NathanOliver
你的兩個例子都表現出未定義的行爲。 「編譯和運行」是未定義行爲的一種可能表現形式; 「訪問錯誤錯誤」是另一回事。另見:[鼻惡魔](http://www.catb.org/jargon/html/N/nasal-demons.html)。一本表明編寫代碼展示UB是一個好主意的書是,我們可以說,不是一本很好的書來研究C++。 –
'* j = 1; //編譯並運行'..但是什麼'cout << i'和'cout << * j'打印? – txtechhelp