在看“Data Structures,Algorithms,and applications in C++”时,一个类中写了如下几个函数,让我如此混乱:
bool IsEmpty() const {return length;}
LinearList<T>& Insert(int k, const T& x);
void Output(ostream& out)const;
让我思考不清的问题是:
一,第一和第三个函数的parameter list后面加的const是为了说明member function是const member function。加了const有什么用?这里能不能不加?
二,这几个函数的parameter中,有的parameter是const,有的不是,那么为什么是“const T& x”?可不可以去掉const?
三,函数的返回类型都不是const类型,都是plain类型。函数类型如果是const,说明什么?
于是,我对照C++ primer 5th edition中各个地方的const讲解做了理解。
第一个问题(参考材料:C++ primer 5th edition7.1.2节):const member function是为了对member function中的隐藏parameter(“this”)的类型做出说明(因为对于隐藏的this参数不能像其他在parameter list中的patameter一样直接给出类型说明)。
声明是const member function后,带来的作用是:扩大了可以调用这个member function的类的范围,从只能是plain class(not const)到既可以是plain也可以是const的类都可以调用;
另一个作用是不能用这个member function做出任何改变调用这个function的class的操作。
第二个问题(参考材料:C++ primer 5th edition6.2.3节):如果parameter声明为const,则传入的argument既可以是const也可以是nonconst;但如果parameter声明不带const,则传入的argument只能是nonconst(也就是将paramter声明为const扩大了应用范围)。
但是将参数声明为const带来的效果是不能在这个函数中改变声明为const的parameter。
第三个问题还在思考。