int length() const
此只能使用于成员函数,意思为此函数里不能函数所在类中的所有成员变量进行修改,他相当于对默认传递到length函数里的this指针加上const的限定,const OneClass * this;
const int length();
可以用于成员函数和非成员函数,表示函数返回值是常量。对于int型的返回值,本身就是使用的值传递返回,所以const修饰int返回值是无意义的,在返回指针的情况下const修饰返回值才有意义,如:
class foo
{
public:
foo()
{
n = 10;
}
const foo * function1()
{
return this;
}
foo * const function2()
{
return this;
}
int n;
};
function1函数返回的指针是指向常量的指针,就不能赋值给非常指针,
如:
foo f;
foo * pf1 = f.function1();
这段代码就会报错
而function2函数的const修饰没有任何作用,因为函数返回按照值传递
int length()const是表示该函数为const函数即不修改其数据成员的值;
const int length()中的const没有意义,因为你返回的是一个temp值而temp值本身就是常量。所以这句应该是:
const int& length()
比如:
class A
{
public:
A(int n) : size(n){}
//int length1()const{++size; return size;} // 错误!不能修改成员的值
const int& length2(){return size;}
private:
size;
};
A a(5);
int b = ++a.length2(); // 错误!返回的值是const不能被修改
a.length2() = 5 // 同上
if(a.length2() = 3) // 同上,返回const在这里可避免手误,因为你可能是想要这样a.length2() == 3