C++:const用法总结

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();  
示例2const 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常量会在内存中分配(可以是堆中也可以是栈中)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值