美文网首页
const修饰的变量真的改变不了?

const修饰的变量真的改变不了?

作者: 风扬雨润 | 来源:发表于2018-10-06 18:22 被阅读0次

            const来源于英文单词constant,即不变的意思,可用于修饰变量,希望将变量变成“常量”。例如 int const a=10;如果调用语句a=12;编译时会报错,提示a是常量,不可修改。程序中为什么要用const?主要还是基于这样一种需求:针对一些特定数值,希望在整个程序运行过程中不可改变,否则导致运行结果出现错误。一般而言,有两种解决方式:一是直接在程序中使用这些数值,但不免显得麻烦,因为需要修改时,全部需要修改;二是定义一个个变量存放不希望改变的数值,但这需要程序员在以后调用该变量时都要小心翼翼,不能改变变量的值。然而人都会有犯错的时候,为了确保变量的安全性就会考虑的到使用const机制,这样一旦无意修改变量,编译器则主动报错。

            然而,当程序中使用const去修饰一个变量时,对于它能百分百可靠地保证不改变变量的值时,我们依然应当保持小心谨慎,因为它并不是安全可靠的,只是编译器为它穿上一件马甲而已。换句话说const机制是通过编译器检查实现的,程序在真正运行过程中,并不关心变量是否被const限定了,只要保证编译通过,在程序运行时,仍可任性修改的。例如,int const a=10;int *p=(int *)&a;*p=100;运行之后可以发现,尽管a已被修饰为const,但值变成了100!因为const只是说明a不能被修改,并没有说a的地址不可以被引用,所以只要变量的地址存在被引用的可能,const修饰的变量还是可以被间接修改的!如果希望例子中的a不能修改,可以将p的值修改为int const *p;以表示p所指向的内存的内容不可通过p修改,这也不失为一种解决办法。

    相关文章

      网友评论

          本文标题:const修饰的变量真的改变不了?

          本文链接:https://www.haomeiwen.com/subject/gvihaftx.html