簡體   English   中英

const cast和std洗衣店

[英]const cast and std launder

const_cast之后修改const構造對象是UB(我相信由於不斷傳播)。 即使與std::launder (AFAIK阻止某些優化,例如const傳播)相結合,它仍然是UB嗎?

#include <new>
#include <iostream>

struct C
{
    int i;
};

int main(const int argc, const char * const * const argv)
{
    const C c{1};
    auto x = std::launder(const_cast<C*>(&c));
    ++x->i;
    std::cout << x->i << std::endl;
    std::cout << c.i << std::endl;

    return 0;
}

是。 嘗試修改const對象的是UB,period。

const對象 - 類型為const限定的對象,或const對象的不可變子對象。 無法修改此類對象 :嘗試直接執行此操作是編譯時錯誤, 並嘗試間接執行此操作(例如,通過引用或指向非const類型的指針修改const對象)會導致未定義的行為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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