const与函数

Const与函数

收集了一些const的基础性的东西,估计其他的用法也都是这些基础的知识的延伸。

1.const基础  

(1)const初始化

   对于const变量需要在定义时就初始化。类的成员变量被定义为const变量,则要在构造函数中用参数列表的方式初始化。

(2)const指针

  如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况:  

         Intb = 500;  

      const int* p = &b;             //常量数据

      int const *p = &b;             //常量数据

      int* const p = &b;             //常量指针

      const int* const p = &b;        //常量数据,常量指针

    可以根据const关键字跟谁靠得更近来记忆。如果const跟指针变量靠得更近(例如:int* const p = &b;),则是常量指针,该指针的指向不能够改变;如果跟星号(*)靠得跟进(例如:const int* p = &b;  和int const *p = &b;  ),则是该指针指向的变量是常数的,不可改变。

 

2.const与函数

 2.1const修饰函数参数与返回值

     其实无论是修饰函数参数还是函数返回值,道理是一样,都是表示为常量的不能够修改的。

(1)const修饰函数参数

TYPE fun(constTYPE a){ }调用函数的时候,被const修饰的参数初始化为const常量,在函数体内,按照const变量的原则处理这些修饰的const参数。例如const TYPE *p,则不能对指针变量p指向的对象进行改变,保护了原指针所指向的内容。

(2)cosnt修饰函数返回值

         const修饰函数返回值要分为两种不同情况。一是如果修饰的返回指针,即指针传递;二是修饰的返回的普通的局部变量,即值传递。

如果const修饰的是函数返回的指针变量,例如:

const int* getScore(void)

那么函数返回的指针所指向的内容是不能够被修改的,并且该返回值只能被赋值给const类型的同类型的指针。例如int p1= getScore(void);是错误,正确的做法是const intp1= getScore(void);

如果const修饰的值传递的函数,例如:

const int getScore(void)

由于函数的返回值会在主调函数中另外的空间存放,这样的加上const是没有任何价值。


2.2const修函类的成员函数

任何不会修改类的成员变量的成员函数都应该声明为const类型。这样可以提高程序的健壮性(任何错误的修改成员变量的操作,编译器都会提醒错误在哪里)。

类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员,对于类的静态数据成员,静态成员函数则可以修改)作任何改变。

const修饰的类的成员函数 表示的是不能对类的成员变量做修改,不同于前面所提的const修饰函数参数和修饰函数返回值,所以const的类成员函数的声明方式是将const放在函数函数表的后面,而不是在函数的前面或者参数表内,例如:int fun(void) const。

类的const成员函数还有一个非常显著的特征是const常量对象可以调用const成员函数,而非const成员函数侧不能被调用。所以只要是不会修改成员变量的函数最好都要声明为const函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值