const

变量:
const修饰变量,表示该变量只读。用于取代c语言中的宏定义,类型安全。非成员变量声明const时必须初始化
const 类型说明符 变量名

指针:
const修饰指针时根据右结合特性,const要区分修饰的是地址(指针),还是修饰指针指向的对象
char *const cp; //const指针,指针结合const。cp的指向不可以改变,但是cp指向的内容可以变化
char const *cp; //const char,cp结合const。cp的指向可以变化,但是不可以通过cp改变指向的内容
const char *cp; //const char,*cp结合const。同上
const char const cp; //不允许改变指向,也不允许通过cp修改指向的内容

修饰函数入参(非引用):
const修饰函数入参,保证函数调用不能修改入参的值。
void Test(const int iAge)//函数体中,确保iAge不被修改。
void Test(const char pName)//函数体中,确保pName指向的内容不被修改。
void Test(char
const pName)//函数体中,确保pName不被修改。
void Test(const char* const pName)//函数体中,确保pName和pName指向的内容不被修改。
void Test(const ClassTest &obj);// 这种情况使用非常多,这样可以避免调用ClassTest的构造函数,直接传递类对象的地址。

修饰函数入参(引用):
类似非引用方式修饰入参,使用const引用方式传递参数,防止生成临时变量,从而提高效率
注意:如果形参和实参的类型不相同,及时使用了const引用修饰,也会产生临时变量,达不到目的

修饰函数返回值
阻止用户修改返回值,接受返回值的变量也要相应的是一个常量或常指针。
一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。
注意:如果函数返回的为某个类对象或对象引用,不建议用const修饰函数的返回值类型。
如果返回值为const对象或对象的引用,则只能访问类的公有(保护)数据成员和const成员函数,并且不允许对其进行赋值操作
如果给采用“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针
函数返回值采用“引用传递”的场合不多,这种方式一般只出现在类的赙值函数中,目的是为了实现链式表达

const成员变量:
const成员只在某个对象生存期内是常量,不同的对象其const数据成员的值可以不同。只能通过初始化列表对其进行初始化。
所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。

const修饰成员函数:
其实const修饰的是this指针,不可以修改对象(this)成员,不管成员否具有const性质。在编译时会做检查
const成员函数只能访问const成员函数;而非const函数可以访问任意的成员函数,包括const成员函数
const对象不能访问非const成员函数。由于非const成员函数可能对成员进行修改,而const变量不允许对成员修改,两则冲突,编译期会做出检查
注意:const修饰成员函数时不能通过this指针直接修改成员,但是可以绕过编译器去进行修改。例如:重新声明一个指向this的指针,通过该指针进行修改this中成员

const用于函数重载:
入参完全相同,一个为const成员函数一个为非const成员函数,构成重载关系。
重载函数调用的时候,根据成员对象的属性,调用相应的函数。const对象调用const成员,非const调用非const成员

mutable:
修饰成员变量,去掉成员变量的const属性

const 在c和c++中的区别 :

  1. C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中(类似define)
  2. 在C语言中,const定义常量时可以不进行初始化: const int size; 因为它被C编译器看作一个声明,指明在别的地方分配存储空间.
  3. C++const默认是内部连接,声明既是定义,必须初始化。通过extern关键字在C++中将其修改为外部连接是可以的。
  4. C++中,是否为const分配空间要看具体情况.如果加上关键字extern或者取const变量地址,则编译器就要为const分配存储空间.
  5. C++中定义常量的时候不再采用define,因为define只做简单的宏替换,并不提供类型检查.

const默认使用内部连接.而C中使用外部连接.
(1) 内连接:编译器只对正被编译的文件创建存储空间,别的文件可以使用相同的表示符或全局变量.C/C++中内连接使用static关键字指定.
(2) 外连接:所有被编译过的文件创建一片单独存储空间.一旦空间被创建,连接器必须解决对这片存储空间的引用.
全局变量和函数使用外部连接.通过extern关键字声明,可以从其他文件访问相应的变量和函数.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值