gpt4 book ai didi

c++ - 通过指针更改 const 的值

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:05 25 4
gpt4 key购买 nike

answerthis question解释了如何通过取消引用指向其地址的指针来更改常量变量(显然是通过创建新变量)。

const int i = 10;
*(int *)&i = 5;

std::cout << &i << "\t" << i << "\n"; // 0x7fff6b325244 10

std::cout << &*(int *)&i << "\t" << *(int *)&i << "\n"; // 0x7fff6b325244 5

使用 &*(int *)&i 我试图获取先前答案所讨论的新变量的地址。我如何找到这个新变量的存储位置?

*(int *)&i 显示不同的值,因此必须有一个新变量。

在 g++ 5.4.0、Ubuntu 16.04 上编译

最佳答案

更改声明为 const 的变量值时的行为未定义。编译器不必做任何有意义的事情。

在这种情况下,编译器在打印 consti 时不会去查看内存,因为它知道该值不可能被更改通过任何符合规范的代码。当您打印 i 时,它会生成此程序集:

mov     esi, 10
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)

请注意,它只是在该调用中对 10 进行了硬编码。

关于c++ - 通过指针更改 const 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817641/

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