Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300303
  • 博文数量: 148
  • 博客积分: 4365
  • 博客等级: 上校
  • 技术积分: 1566
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 21:38
文章分类
文章存档

2014年(2)

2013年(45)

2012年(18)

2011年(1)

2009年(54)

2008年(28)

我的朋友

分类: C/C++

2012-12-12 21:49:07

常成员函数可以和非常成员函数之间进行重载。
对于迭代器需要注意的是:
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) |
给主人留下些什么吧!~~