c++中的const关键字

什么是const

自从接触到c++后就对const这个关键词很是看不上,但是接触到的很多大神的项目都需要用到它,于是就求助于万能的度娘。

在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。它限定一个变量不允许被改变,产生静态作用。C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。

–转载自百度百科

修饰普通变量

总地来说const修饰的变量的值就会被视为一个常量,不能再修改。所以对const修饰的变量赋值后编译器会报错。
然而:

#include<iostream>
 
using namespace std;
 
int main(void)
{
    const int  a = 7;
    int  *p = (int*)&a;
    *p = 8;
    cout<<a;
    system("pause");
    return 0;
}

这里输出的a值仍然是7,但这里实际上内存中的a的那段变量已经改变为8了,因为const编译过程中会将a替换为7,这里的a值已经与原先的内存值不一样了
总之:

1.const全局变量存储在全局存储空间,其值只有可读属性,不能修改;
2.const局部变量存储在堆栈中,可通过指针修改其值;
3.const变量在预处理时处理,编译器只对其值读取一次。

修饰指针变量

  • const 修饰指针指向的内容,则内容为不可变量。
    const int *p = 8;
    
    指针指向内容8不可改变,被称为左定值
    int a=8;
	int const *p=&a;
  const 和int的位置可以互换,但是const int *p内容不可变,其他可变,int const *p内容可变,但是指向的地址不可变。
   int a=9;
   const int*const p=&a;

此时 *p 和 p 都被修饰了,那么 p 中存放的内存单元的地址和内存单元中的内容都不可变。

修饰引用

把对常量的引用绑定到const对象上,就像绑定到其他对象上一样,不能被用作修改它所绑定的对象。
在初始化常量引用时允许任意表达式作为初始值,只要该表达式的结果能转换成引用的类型,允许为一个常量引用绑定非常量的对象、字面值,甚至是个一般表达式:

引用(本来想写参考,但是基于大段大段的抄,干脆,就写引用吧):

http://blog.csdn.net/xingjiarong/article/details/47282255
https://blog.csdn.net/a3125504x/article/details/78835973
https://blog.csdn.net/qnavy123/article/details/82183586
https://www.cnblogs.com/CodeWithMe/p/10513522.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值