先看一个无意义的写法:
const int f(); 注意这个函数是按值返回的,即返回的值是经过拷贝的副本。这当然毫无意义,你想告诉我,不要改变函数里面的值,现在我们返回的是一个拷贝副本,当然改变不了我们函数里的值。一般来说,内部类型(int之类)不需要用返回const值。
如果返回自定义类型,那么定义返回时const值的意思是告诉你这个返回值不能当左值使用。如
A f(){}和const A g();
允许f() = A();而不允许 g() = A()
class X
{
int i;
public:
X(int ii=0){i=ii;}
void Modify(){i++;}
};
X f5()
{
return X();
}
const X f6()
{
return X();
}
void f7(X& x)
{
x.Modify();
}
int main()
{
f5() = X();
f5().Modify();
f7(f5());
//f6() = X(1);//: 二进制“=”: 没有找到接受“const X”类型的左操作数的运算符(或没有可接受的转换)
//f6().Modify();
//f7(f6());// “f7”: 不能将参数 1 从“const X”转换为“X &”
return 0;