常成员函数可以和非常成员函数之间进行重载。
对于迭代器需要注意的是:
const std::vector::iterator iter,这样的iter,可以改变其*iter,但是不能iter++等操作。
只读意义上的应该用 std::vector::const_iterator citer,即*iter是不可改变的。
有的时候加上一个const,能避免一些意外的异常,比如
const Rational operator*(const Rational& lhs, const Rational& rhs);
这里如果不加const,如果手误 if (a * b = c),就出了意外。
const成员函数只是语义(bitwise)上不改变任何成员变量,但是如果有如下情况
char& operator[](std::size_t position) const
{ return pText[position]; }
配合如下代码:
const CTextBlock cctb("Hello");
char *pc = &cctb[0];
*pc = 'J';
这样就把cctb的pText值改为了"Jello"。(但是在win7下,用mingw编译的程序运行到*pc赋值时崩溃了).
当一个成员函数既有const也有非const版本时,可以在非const函数体内调用const版本,再用const_cast转换。反序调用则可能有风险(先调用的非const版本内误修改某成员)。
总而言之,可以使用const时,尽量使用。
阅读(255) | 评论(0) | 转发(0) |