Effective C++读书笔记(条款03:尽可能使用const)

本文详细介绍了C++中const关键字在指针和迭代器中的应用,包括const指针、指针const和两者皆const的场景。同时,讨论了const成员函数和非const成员函数的区别,以及在STL迭代器中的体现。强调const在代码中的重要性,用于帮助编译器检测错误用法,并避免不必要的对象修改。
摘要由CSDN通过智能技术生成
  • 如果关键字const出现在*号的左边,被指物是常量。
  • 如果关键字const出现在*号右边,表示指针自身是常量。
  • 如果关键字const出现在*号两边,被指物和指针都是常量。
char greeting[]="Hello";

const char* p=greeting;        //non-const pointer, const data(常量指针)
char* const p=greeting;        //const pointer, non-const data(指针常量)
const char* const p=greeting;  //const pointer, const data

STL迭代器以指针为根据塑膜出来,所以迭代器的作用就像个T*指针,声明迭代器为const就像声明指针为const一样(T* const),表示这个迭代器不得指向不同的东西,但它所指的东西是可以改动的。如果你希望迭代器所指的东西不可改动(即 const T*),你需要的是const_iterator。

std::vector<int> vec;

const std::vector<int>::iterator iter = vec.begin(); //指针常量

std::vector<int>::const_iterator cIter = vec.begin();//常量指针

将const实施于成员函数的目的是为了确认该成员函数可作用于const对象身上。两个成员函数如果只是常量性不同,可以被重载。

const成员函数调用non-cosnt成员函数是一个错误的行为,因为对象有可能因此而改动。

bitwse const:成员函数只有在不更改对象的任何成员变量时才可以说是const。也就是说它不更改对象内的任何一个bit。不幸的是。许多成员函数虽然不具备const性质,却能通过bitwise测试。一个更改了“指针所指物”的成员函数虽然不能算是const,但如果只有指针隶属于对象,那么称此函数为bitwise const不会引发编译器异议。

1)const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员;

2)非const成员函数可以访问非const对象的非const数据成员、const数据成员,但不可以访问const对象的任意数据成员;

请记住:

  1. 将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。
  2. 当conts和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值