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