簡體   English   中英

const_cast轉換為左值引用不會刪除constness

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM