1.与define的区别
在c中const的定义是全局的,在c++中则是内部连接
define则是全局的
const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。或者说,const的常量是一个Run-Time的概念,他在程序中确确实实的存在可以被调用、传递。而#define常量则是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在。
在c++中推荐用const取代#define
2.与c中const的区别及c++中不同位置const的性质
在c中const的意思是“一个不能被改变的普通变量”,在c中,它总是占有存储而且它的名字是全局符,c编译器不能把const看成是一个编译期间的常量。
c++中是否为const分配空间视情况而定,对于复杂的结构,编译器是会建立存储的,在这种情况下const意味着“不能改变的一块存储”。
3.常指针及指向常量的指针
常指针,指针本身是一个const,不能改变:int* const x
指向常量的指针,指针所指向的内容是不可更改的:int const* x(x是一个指针,它指向一个const int)
可以将“非常量”赋值给“常量”,反之是不可以的。
4.函数中的const
传递const:参数不能被改变,它其实是函数创建者的工具,而不是函数调用者的工具。
返回值const:对于内部数据类型来说,这种结构没有什么作用。但是对于处理用户定义类型时,返回值为常量是十分必要的。如果一个函数返回一个类对象的值,其值为常量,那么这个函数的返回值不能是一个左值(即它不能被赋值也不能被修改)。
5.类中的const
在一个类里const的意义是:在这个对象寿命期内,这是一个常量,然而对于这个常量来说,每个不同的对象可以含一个不同的值。因为在类的对象中进行了存储空间的分配,编译器不能知道const的内容是什么,这意味着对于类里的常数表达式来说,const就像在c中一样没有作用。这时候可以使用enum,enum是不会占用对象中的存储空间的
6.const对象
const对象可以实现一种只读存储的能力
a.const对象只能访问const成员函数,而非const对象可以访问任意
的成员函数,包括const成员函数.
b.const对象的成员是不可修改的,然而const对象通过指针维护的对象却
是可以修改的.
c.const成员函数不可以修改对象的数据,不管对象是否具有const性质.它在
编译时,以是否修改成员数据为依据,进行检查.
d.然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段
都可修改,自然此时的const成员函数是可以修改它的
阅读(518) | 评论(0) | 转发(0) |