const详解

1.常变量:

变量用const修饰,其值不得被改变。任何改变此变量的代码都会产生编译错误。Const加在数据类型前后均可。

void main(void)
{
    const int i = 10;    //i,j都用作常变量
    int const j = 20;
    i = 15;            //错误,常变量不能改变
    j = 25;            //错误,常变量不能改变
}

 

2.常指针:

Const跟指针一起使用的时候有两种方法如下:

 -1.const可用来限制指针不可变。也就是说指针指向的内存地址不可变,但可以随意改变该地址指向的内存的内容。

     

void main(void)
{
    char* const str = "Hello, World";    //常指针,指向字符串
    *str = ''M'';            //可以改变字符串内容
    str = "Bye, World";        //错误,如能改变常指针指向的内存地址
}


 -2.const也可用来限制指针指向的内存不可变,但指针指向的内存地址可变。

 

void main(void)
{
    const char* str = "Hello, World";    //指针,指向字符串常量
    *str = ''M'';        //错误,不能改变字符串内容
    str = "Bye, World";    //修改指针使其指向另一个字符串
    *str = ''M'';        //错误,仍不能改变字符串内容
}


 -3.这两种方式可以组合起来使用,使指针和内存内容都不可变。

 

void main(void)
{
    const char* const str = "Hello, World";        //指向字符串常量的常指针
    *str = ''M'';            //错误,不能改变字符串内容
    str = "Bye, World";        //错误,不能改变指针指向的地址
}


 

3.Const和引用:

引用实际上就是变量的别名,这里有几条规则:
 -声明变量时必须初始化
 - 一经初始化,引用不能在指向其它变量。
 -任何对引用的改变都将改变原变量。
 -引用和变量本身指向同一内存地址

void main(void)
{
    int i = 10;                    //i和j是int型变量
    int j = 20;        
    int &r = i;                    //r 是变量i的引用
    int &s;                        //错误,声明引用时必须初始化
    i = 15;                        //i 和 r 都等于15
    i++;                        //i 和 r都等于16
    r = 18;                        //i 和r 都等于18
    printf("Address of i=%u, Address of r=%u",&i,&r);    //内存地址相同
    r = j;                        //i 和 r都等于20,但r不是j的引用
    r++;                        //i 和 r 都等于21, j 仍等于20
}


4.Const和成员函数
声明成员函数时,末尾加const修饰,表示在成员函数内不得改变该对象的任何数据。这种模式常被用来表示对象数据只读的访问模式。例如:

class MyClass
{
    char *str ="Hello, World";
    MyClass()
    {
        //void constructor
    }
    
    ~MyClass()
    {
        //destructor
    }

    char ValueAt(int pos) const    //const method is an accessor method
    {
        if(pos >= 12)
               return 0;
		*str = ''M''; 	     //错误,不得修改该对象
        return str[pos];    	//return the value at position pos
    }
}


5.Const和重载
重载函数的时候也可以使用const,考虑下面的代码:

class MyClass
{
    char *str ="Hello, World";
    MyClass()
    {
        //void constructor
    }
    
    ~MyClass()
    {
        //destructor
    }

    char ValueAt(int pos) const    //const method is an accessor method
    {
        if(pos >= 12)
               return 0;
        return str[pos];    //return the value at position pos
    }
    
    char& ValueAt(int pos)        //通过返回引用设置内存内容
    {
        if(pos >= 12)
               return NULL;
        return str[pos];
    }
}



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值