繁体   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