开门见山的说:可以改,const修饰的变量不管是指针变量,引用,还是普通变量都可以通过某种方式修改,但是极为不推荐。
const本质是修饰变量属性是一个只读的变量属性,而不是常量。
const定义的变量本质还是变量是可变的,不是常量。
const修饰的变量只是告诉编译器改变量不能出现在赋值符号的左边。
-
在C语言中,使用const关键字修饰的变量被视为只读变量,不允许修改其值。虽然C语言中可以使用类型转换来绕过编译器的限制,但这是一种不安全的行为,可能引发潜在的错误。
-
相比之下,C++语言中的const修饰符更加严格。在C++中,使用const修饰的变量也被视为只读,不允许直接修改其值。与C语言不同的是,C++对于试图修改const变量的行为有更为严格的限制,编译器会发出错误提示。
-
需要注意的是,尽管C++对const的处理更严格,但仍然存在一些特殊情况下可以修改const变量值的方法,例如通过const_cast进行类型转换、使用mutable关键字等,但这些方法通常不推荐使用,应保持const变量的只读性。
#include<stdio.h>
int main()
{
const int num = 0;
int* p = #
*p = 2;
printf("%d",num);
}
#include<iostream>
using namespace std;
int main()
{
const int num = 0;
int* p = #
*p = 2;
cout << num;
}
可以提出大胆的假设:如果代码的逻辑完全相同,则语言表达出的内容与编译器和编译环境无关,只与语言本身的特性有关。
结论:就是C++给编译器下了命令,告诉他不可以这样改。C语言更自由,没有限制指针的方式。C++兼容了C的特点,加强了对数据的维护。
所以无论是C还是C++,const修饰的变量都应该被视为常量,书写道德上不能被修改,理论上也不建议修改。(本质上可以通过极端的方式修改)