gpt4 book ai didi

c++ - 可以在 C 中更改 const 的值,但不能在 C++ 中更改

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

考虑以下代码

#include <stdio.h>
#include <string.h>

main()
{
const int a = 2;
long p = (long)&a;
int *c = (int *)p;
*c =3;
printf("%d", a);
}

此代码可以在 C 中将值更改为 a 但不能在 C++ 中更改。我知道 C++ 正在应用优化并将 a 的实例替换为 2。那么这是 C++ 中的错误修复还是由于优化而偶然修复的错误?

最佳答案

无论是直接还是间接修改const 值都是未定义行为。这可能会在 C 中编译,甚至可能在您的机器上毫无问题地运行,但它仍然是未定义的行为。

C 和 C++ 在这方面的区别是:对于 const int a = 2,C++ 将 a 视为常量表达式,例如,您可以使用 a 作为数组维度:

int n[a];  //fine in C++

但是在C中,a不是常量表达式,同理代码:

int n[a];  //VLA in C99

这里的n不是定长数组,而是变长数组。

关于c++ - 可以在 C 中更改 const 的值,但不能在 C++ 中更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23101049/

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