const本质——修饰的值能不能改?

开门见山的说:可以改,const修饰的变量不管是指针变量,引用,还是普通变量都可以通过某种方式修改,但是极为不推荐。
const本质是修饰变量属性是一个只读的变量属性,而不是常量。

const定义的变量本质还是变量是可变的,不是常量。

const修饰的变量只是告诉编译器改变量不能出现在赋值符号的左边。

  1. 在C语言中,使用const关键字修饰的变量被视为只读变量,不允许修改其值。虽然C语言中可以使用类型转换来绕过编译器的限制,但这是一种不安全的行为,可能引发潜在的错误。

  2. 相比之下,C++语言中的const修饰符更加严格。在C++中,使用const修饰的变量也被视为只读,不允许直接修改其值。与C语言不同的是,C++对于试图修改const变量的行为有更为严格的限制,编译器会发出错误提示。

  3. 需要注意的是,尽管C++对const的处理更严格,但仍然存在一些特殊情况下可以修改const变量值的方法,例如通过const_cast进行类型转换、使用mutable关键字等,但这些方法通常不推荐使用,应保持const变量的只读性。

#include

int main()
{

    const int num = 0;

    int* p = #

    *p = 2;

    printf("%d",num);

}

const本质——修饰的值能不能改?_第1张图片

#include
using namespace std;
int main()
{
    const int num = 0;

    int* p = #

    *p = 2;

    cout << num;
}

const本质——修饰的值能不能改?_第2张图片
const本质——修饰的值能不能改?_第3张图片
可以提出大胆的假设:如果代码的逻辑完全相同,则语言表达出的内容与编译器和编译环境无关,只与语言本身的特性有关。

结论:就是C++给编译器下了命令,告诉他不可以这样改。C语言更自由,没有限制指针的方式。C++兼容了C的特点,加强了对数据的维护。

所以无论是C还是C++,const修饰的变量都应该被视为常量,书写道德上不能被修改,理论上也不建议修改。(本质上可以通过极端的方式修改)

你可能感兴趣的:(c++)