![](/img/trans.png)
[英]Why does const_cast remove constness for a pointer but not for a pointer to a const?
[英]const_cast conversion to lvalue reference doesn't remove constness
我想了解以下兩種情況的區別。
const uint32_t v0 = 0;
const uint32_t v1 = 1;
const_cast<uint32_t&>(v0) = v1;
std::cout << v0 << std::endl;
結果如下:
0
然而,
struct S {
const uint32_t v0;
S() : v0( 0U ) {}
} s;
const_cast<uint32_t&>(s.v0) = v1;
std::cout << s.v0 << std::endl;
我明白了:
1
關於第一種情況,為什么“v0”保持為0?
提前致謝。
對數據應用const_cast
然后修改它實際上是常量具有未定義的行為 。 原始數據的原因可能是由編譯器放入只讀存儲器中。 因此,嘗試修改它將導致UB ,將給出的輸出取決於編譯器。
同樣正如@Yakk指出的那樣,編譯器實際上可能只使用常量變量的值來減少內存使用量。 在這種情況下,編輯涉及常量變量的任何表達式以將變量替換為實際值,因此內存中沒有任何內容。 如果您嘗試更改內存內容,請為BOOM做好准備。
底線:不要這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.