C++ 中 const

一:定义常量

  const关键字指定变量的值是恒定的,以防止程序员修改它,并且在定义一个const变量时必须初始化它,除非你用了extern关键词准备来进行外部链接。

const int i = 5;    //right,和 int const i=5; 等价  
const int j;        //error,未初始化

extern const int k; //right,外部链接

二:指针使用const

2.1 指向常量int的指针

int x = 1;
const int* p1 = &x;
int const* p2;       //两种写法表示的都是一个意思

*p1 = 10;            //error,你不可以通过指针p1改变x值

  注意,const在这里可以不为其初始化。

2.2 指向变量int的常量指针

int x = 1;
int * const p1 = &x;  //right
*p1 = 3;              //right,与2.1不同,你可以通过指针p1修改x值
int * const p2;       //error,与2.1不同,必须初始化

int y = 2;
p1 = &y;             //error,你不可以让p1指向别的地方

2.3 const指针与普通指针的区别

int x = 1;
const int * con_p = &x;
int * p = con_p;  //error

  我们很容易知道第三句代码是错的。也就是不可以把指向常量的指针赋给一个普通的指针,这是为了防止普通指针修改该常量。
  那下面的代码呢?

int x = 1;
int * const con_p = &x;
int * p = con_p;  //right

  这句代码是对的。把指向变量的常量指针赋给一个普通指针,注意赋值的是x的地址,这无关常量指针的事,要注意区分。

2.4 总结

  请注意,const是一个左结合的类型修饰符,根据这个特点可以很容易总结如下:
  const int * p,指向常量int的指针,即int是常量,指针是变量;
  int * const p,指向变量int的常量指针,即int是变量,指针是常量。

三:const修饰的函数

const int fun1()     //这个其实无意义,因为参数返回本身就是赋值;
const int * fun2()   //调用时 const int * pValue = fun2();             
int * const fun3()   //调用时 int * const pValue = fun2(); 

四:类中使用const

4.1 类成员变量

  表示类成员常量,不能被修改,且它只能在初始化列表中赋值。

class Base  
{  
private:  
    const int data;        //类成员常量
public:  
    Base(int x):data(x){}  //列表初始化
}

为什么只能在初始化列表中赋值?假如写出了下面的代码:

class Base  
{  
private:  
    const int size = 10;        //error
    int a[data];
public:  
    Base(int x):data(x){}  //列表初始化
}

const变量属于对象,而不是类,在对象未被定义前,size不存在,那么a就不存在,为了避免这种写法,故要求const变量只能在初始化列表中赋值。

4.2 类成员函数

  const修饰类的成员函数,则该成员函数不能修改类成员变量调用类中任何非const成员函数。一般写在函数的最后来修饰。

class Base  
{  
private:  
    int data;  
public:  
    Base(int x):data(x){}  
    void func1()  
    {  
        ;  
    }
    void func2()const   
    {   
        data = 1;         //error  
    }  
    void func3()const  
    {  
        func1();          //error  
    }  
}  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值