01 const修饰普通变量和指针
语法:
>>const type value;
>>type const value;
示例1:
const int a; // 普通变量
int const a;
示例2:
int * const p; // (int *)p不可变
const (int *) p; // (int *)p不可变
const int * p; // (*p)不可变
int const * p; // (*p)不可变
02 const修饰函数参数
功能:
函数体不能修改参数本身或者参数其中包含的值)
示例1:
void func(const int val); // 传递过来的入参不可变;因为是值传递,会重新分配内存空间,对此内存块操作,所以此处无意义;
void func(const int * val); // (*val)不可变
void func(int * const p); // p不可变
示例2:
void func(const type& val); // 引用参数在函数内不可变;
03 const修饰函数返回值
功能:修饰返回的变量不可变;
示例1:
const int func();
示例2:
const int * func();
>>const int * p = func(); // (*p)不变
int * const func();
>>int * const p = func(); // p不变
04 const修饰对象/对象指针/对象引用
功能:
此为常量对象,其中的任何成员都不能被修改;
//注:const修饰的对象,该对象的任何非const成员函数不能被调用,因为任何非const成员会有修改成员变量的企图;
示例:
class A
{
void func1();
void func2() const;
};
>>const A a;
>>a.func1(); // wrong
>>a.func2(); // ok
05 const 修饰成员变量
功能:
const修饰的成员变量,表示成员常量,不能被修改,同时它只能在初始化列表中赋值;
示例:
class A
{
private:
const int m_val; // 成员常量,不能被修改;
public:
A(int a):m_val(a){ // 只能在初始化列表中赋值
}
};
06 const修饰成员函数
功能:常成员函数,不能改变任何对象的成员变量,也不能调用类中任何非const成员函数。
注:对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的重要作用就是限制于const对象的使用.
07 const常量与define宏定义的区别
(1) 编译器处理方式不同
define宏在预处理阶段展开
const常量在编译运行阶段使用
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开
const常量有具体的类型,在编译阶段会执行类型检查
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存
const常量会在内存中分配(可以是堆中也可以是栈中)
C++:const用法总结
最新推荐文章于 2024-09-09 08:30:00 发布