gpt4 book ai didi

C++ const 指针 - 无法解释的行为

转载 作者:太空狗 更新时间:2023-10-29 23:29:48 25 4
gpt4 key购买 nike

我有这段代码:

const int x = 7;
const int &y = x;

int *z = (int*)&y;
*z = 8;

cout << x<< endl;
cout << y<< endl;
cout << *z<< endl;

产生以下输出:

7
8
8

我知道不应该像我上面那样删除常量。但是,为什么 x 会打印出 7?我只创建了一个变量,所以如果输出显示 7 和 8,那么应该创建了 2 个变量。怎么打印出两个不同的数字。

最佳答案

I know that one should not remove the const as I did above.

没错。这样做是未定义的行为,这意味着任何事情 都可能发生。 (更准确地说,创建 z 不是未定义的行为;通过它修改 x 是。)

However, why does x print out 7? I've only created a single var, so if the output shows 7 and 8, then then there should be 2 vars created. How come there be 2 different numbers printed.

关于未定义行为的推理很奇怪 - 但为了调试目的了解正在发生的事情可能很有用。在这种情况下,几乎可以肯定发生的是编译器已经优化:

cout << x<< endl;

cout << 7 << endl;

因为您无法合法地修改 x 的值。然后您非法修改 x 的值,并设法打印出新值。

重要提示

不要试图依赖这种行为;正如我上面所说,它仅用于调试目的。如果编译器发生变化,它可能会在优化方面做得更好,并且只为所有值打印 7(因为 *z = 8 是未定义的行为),或者它可能会将 x 放入 read-仅内存(并导致访问冲突),或者它可能最终为所有值打印 8,或者可能发生其他任何事情。

关于C++ const 指针 - 无法解释的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43607292/

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