-
const修饰的只读变量
如下定义是错误的,因为C编译器并不知道其在编译期间的值。
const int SIZE=10;
int buf[SIZE]; -
const修饰指针
指向const的指针:指针可变,指针所指对象不可变
const int *p;
int const *p; //p可变,p指向的对象不可变
const指针:指针不可变,指针所指对象可变
int * const p; //p不可变,p所指对象可变
指向const的const指针:指针不可变,指针所指对象也不可变
const int * const p -
const修饰函数参数
const只能修饰输入参数,如果输入参数采用指针传递,那么加const修饰可以防止函数体内意外的修改该指针。
如果采用值传递,由于函数会自动产生临时变量用于复制该参数,该出入参数本来就无需保护。
对于非内部数据类型的输入参数,应将值传递的方式改为const引用传递。如果参数作输出用,不论是什么数据类型,也不论采用指针还是引用传递,都不能加const修饰,否则该参数将失去输出功能。
-
const修饰函数返回值
返回指针时,若加const修饰,那么函数返回值的内容不能被修改,而只能赋值给加const修饰的同类型指针。
const char * getString(void);
char *str=getString(); //错误
const char *str= getString();
char const *str = getSting();函数返回引用时,是为了实现链式表达式(类的赋值函数),若再加const修饰,那么返回值的内容不能被修改。
class Base
{
…
Base &operator=(const base &r)
…
};
Base obj1, obj2, obj3;
…
obj1=obj2=obj3;函数返回一个值时(返回值采用值传递方式),函数会把返回值复制到外部临时存储单元,加const修饰无用。
-
const成员函数
class Base
{
void fun();
void fun() const; //常成员函数
};函数末尾加const改变了隐含的this指针,(this作为一个默认的形参),使得 this指向的对象为const类型。this本身类型为Base * const,末尾加const后,变为const Base * const,即this指向的对象也为const。这也是fun()函数可以共存的原因,即重载(相同作用域,函数参数列表不同)。
-
const数据成员
常数据成员必须在构造函数的成员初始化列表中初始化。
const数据成员只在某个对象的生存期内是常量,对整个类而言是可变的,因为类能实例化多个对象,不同对象其const数据成员的值可以不同。所以不能在类中初始化const数据成员,此时,类的对象还没有被创建,编译器并不知道const数据成员的值。
要想建立在整个类中都恒定不变的常量,可以考虑枚举常量。
const修饰符
最新推荐文章于 2023-11-10 21:46:12 发布