const在C++中远比在C中恐怖!其实本质就两点而已
c++ 函数的返回类型之const 什么时候起作用呢?
const:1.常属性,限制变量能否被修改 2.变量使用类型一直需要考虑const
更多C/C++学习资料,请私信我“代码”,即可获取
函数返回值不想其立即修改的
更多C/C++学习资料,请私信我“代码”,即可获取
这是一个简单的避免产生隐形返回变量的方法,abc 的函数返回是引用,main函数中,++ 操作是基于 const int & 类型,所以会出错,但以后对解引用的操作不会受到const 约束。
这样的好处是避免了函数返回值与操作符的逻辑错误结合,例如下面的例子中函数返回的++,对于main 函数是不直观的,进一步的应用是在操作符重载方面,见下一情况说明。
更多C/C++学习资料,请私信我“代码”,即可获取
重载运算符符合逻辑
更多C/C++学习资料,请私信我“代码”,即可获取
一般变量赋值a=b=c,这是没有问题的,但是(a=b)=c 编译会出错,这是内置操作符的判断,如果对 = 操作符重载了,为了避免这样的逻辑错误,需要在返回类型上加上const 约束,下面例子中A类重载了运算符 +,如果第6行中返回类型没有const 约束,那么程序编译会通过,场景如果是:if(a+b==c) 误写为 if(a+b=c)。
+ 运算符重载加const 约束 对 a+b+c 这样的运算没有影响,因为a+b 运算的结果是const ,但对其只是只读操作,会创建一个新的 A 类返回。
通过函数创建指向常量的指针
更多C/C++学习资料,请私信我“代码”,即可获取
如果通过函数来创建常字符串,除了在main 函数中约束之外,也可以在函数返回类型中约束,第一行中左边的const 约束了返回的是常字符串的指针索引,因为它的存在12行必须声明为 const char *p,如果第一行左边const 不存在,那么12行可以加可以不加const,这样约束常字符串的效果只能在main 中反映,不能很好的表达调用函数的功能。
同时第一行中的第二个const 加了也无效,其约束的是一个由 char * p 转变为 char * const 的隐藏指针,该隐藏指针的指向值赋予给main 函数中的p,所以后者可以修改指向。
满足对const成员函数的调用
这个结合例子说明比较容易,这里主要有一个原因是:const类型的对象,不能调用自身的非const成员函数,但是可以调用自己的const成员函数。例如下面的例子,b 声明为const A,12行是可以编译成功的,13行缺会错误,根本原因或许是内部 this 指针转换(大家可能学习语法 的时候是:常对象调用常成员函数。)。
更多C/C++学习资料,请私信我“代码”,即可获取
基于上面的一个原因,下面例子便容易说明,A 类是B 类运算中产生的隐藏变量,为了调用A 类中的const 函数,B类生产A 类的函数返回类型需要加const。
更多C/C++学习资料,请私信我“代码”,即可获取
const 成员函数的返回类型是引用时候,需要加const 约束
更多C/C++学习资料,请私信我“代码”,即可获取
这应该是内部value 对象类型的转换,GetValue 函数中的value 被转换成了 const int(第7行没有const 也会转换),但return 的如果是 int & 类型便出现了 const int -> int & 这种类型转换,这是禁止的,所以返回引用时必须加const,总结来说,如果GetValue 是const函数且返回类型是引用,那么返回类型中的const 和18行的const 不能省略。
引申
更多C/C++学习资料,请私信我“代码”,即可获取
如果const 成员函数返回的值 指针呢?这个就交给读者自己去搞定了!
更多精彩
C语言多关卡推箱子实战视频教学
1000+代码用C语言结合win32写2048小游戏
1.文章《const只读什么作用,const只读变量》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《const只读什么作用,const只读变量》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好