const 修饰符在C/C++中的作用

转自:http://blog.csdn.net/renai2008/article/details/7747809(有稍修改)

1.1.1. 定义普通常量
const double PI = 3.1414926;
const int POOL_SIZE = 20;

定义常量有三种方法:宏、constenum,其中宏应该尽量避免,而constenum也各有优缺点,最大的区别就是enum只能用于定义包括0的正整数,而不能定义浮点数;而对于定义逻辑关系较近的一组整数时比较适合使用enum,也可以考虑使用类代替enum

常量必须在定义时进行初始化,之后便不能再赋值。说它不能被赋值并不是说常量的值是绝对不会改变的,只是说不能直接赋值,但可以通过指针及强制类型转换、const_cast是可以改变常量的值的。


1.1.2. 修饰指针
const与指针放到一起,很多人便会想到一个绕口令指针常量与常量指针。指针常量即一个指针变量,该变量不能被赋值,而指针指向的内存单元的内容是可以改变的;常量指针即一个指向常量的指针,指针变量本身可以赋值,而指针指向的内存单元的内容是不可以被重新赋值的。

const是修饰类型还是修饰指针,要看const的位置,放在*前就是修饰数据类型,放到*后就是修饰指针,const charchar const是一样的。

1.1.3. 修饰类成员常量
当使用const修饰类成员变量时便定义了常数据成员,它的使用与使用类外定义的常量本质上并没有什么区别,由定义知也是静态的,在这里只想指出一点:const数据成员只能被const修饰的函数使用这是没有根据的,也就是不成立的。

1.1.4. 修饰类成员函数
const修饰成员函数语法:
typeReturn Function(params) const;
使用const修饰的成员函数不能修改类的成员变量(不管是不是const变量),而且只能调用成员类对象const函数,这是为了保证防止在函数中对成员数据进行修改,但有个例外,就是mutable修饰的成员变量可以在const修饰的成员函数中被修改。
另外,const只能修饰非静态函数。

1.1.5. 修饰类对象、对象引用或对象指针(常量指针)
const修饰自定义的类对象时,与修饰C++内置类型的变量的思想是一致的,但稍有不同,除了不能被赋值外,还不能调用没有使用const修饰的非静态成员函数。当const修饰类对象引用、指针时限制是一样的,因为引用本身与直接使用该变量实质上没有区别,而使用指针只是将.操作符改为了->本质上还是一样的

1.1.6. 修饰函数参数
const修饰函数的例子是很常见了,表示函数的参数在函数体内不会被意外修改,一般用于修饰输入参数,例如标准库中的字符串连接函数。str1是输出参数,其内容会被修改,而str2为输入参数,其内容不会修改(其实这也不一定)
char* strcat(char* str1, const char* str2);

1.1.7. 修饰函数返回值
const可以用于修饰任何类型,只要返回值类型不是voidconst就可以用来修饰返回值的类型。但实际上const用于修饰非引用的返回值类型是没有意义的,因为在将返回值赋予另一个变量时,返回的只是一个常数值,并且此时用于传递返回值的对象已经被销毁,不用担心对象值被更改。

C++:当返回值是引用类型时,如果该引用的值不希望被修改是可以声明为常引用的返回类型的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值