c++ 表达式的回到类别之const 甚么这时候起促进作用呢?
const:1.常特性,管制表达式若想被修正 2.表达式采用类别始终须要考量const
表达式回到值不该其立刻修正的
这是两个单纯的防止造成隐身回到表达式的方式,abc 的表达式回到是提及,main表达式中,++ 操作方式是如前所述 const int & 类别,因此会手忙脚乱,但之后匍茎提及的操作方式不能受const 束缚。
这种的益处是防止了表达式回到值与操作方式符的方式论严重错误紧密结合,比如上面的范例中表达式回到的++,对main 表达式是不单纯的,更进一步的应用领域是在操作方式符空载各方面,见下一情形表明。
空载操作方式符合乎方式论
一般表达式赋值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 类回到。
通过表达式创建指向常量的指针
如果通过表达式来创建常字符串,除了在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 指针转换(大家可能学习语法 的这时候是:常对象调用常成员表达式。)。
更
如前所述上面的两个原因,上面范例便容易表明,A 类是B 类运算中造成的隐藏表达式,为了调用A 类中的const 表达式,B类生产A 类的表达式回到类别须要加const。
const 成员表达式的回到类别是提及这时候,须要加const 束缚
这应该是内部value 对象类型的转换,GetValue 表达式中的value 被转换成了 const int(第7行没有const 也会转换),但return 的如果是 int & 类别便出现了 const int -> int & 这种类别转换,这是禁止的,因此回到提及时必须加const,总结来说,如果GetValue 是const表达式且回到类别是提及,那么回到类别中的const 和18行的const 不能省略。
引申
更多C/
如果const 成员表达式回到的值 指针呢?这个就交给读者自己去搞定了!