gpt4 book ai didi

c++ - const_cast 转换为左值引用不会删除常量

转载 作者:太空狗 更新时间:2023-10-29 19:58:15 24 4
gpt4 key购买 nike

我想了解以下两种情况的区别。

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 做好准备。

底线:不要这样做。

关于c++ - const_cast 转换为左值引用不会删除常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com