8.3 函数参数和返回值
用const限定函数参数及返回值是常量概念容易引起混淆的另一个地方。如果按值传递对象,对客户来讲,用const限定没有意义(它意味着传递的参数在函数里是不能被修改的)。如果按常量返回用户定义类型的一个对象的值,这意味着返回值不能被修改。如果传递并返回地址,const将保证该地址内容不会被改变。
8.3.1 传递const值
如果函数参数是按值传递,则可用指定参数是const的,如:
这是什么意思呢?这是作了一个约定:变量初值不会被函数f1()改变。然而,由于参数是按值传递的,因此要立即产生原变量的副本,这个约定对客户来说是隐式的。
在函数里,const有这样的意义:参数不能被改变。所以它其实是函数创建者的工具,而不是函数调用者的工具。
为了不使调用者混淆,在函数内部用const限定参数优于在参数表里用const限定参数。可以用一个指针来实现,但更好的语法形式是“引用”,这是第11章讨论的主题。简而言之,引用像一个被自动间接引用的常量指针,它的作用是成为对象的别名。为建立一个引用,在定义里使用&。所以,不引起混淆的函数定义应该是这样的:
这又会得到一个错误信息,但这时局部对象的常量性(constness)不是函数特征标志的部分;它仅对函数实现有意义,所以它对客户来说是不可见的。