effective C++ 条款 3:尽可能使用const
const 修饰指针:如果关键字const出现在星号*左边,表示被指物是常量,如果const出现在*右边表示指针自身是常量, 如果出现在两边表示被指物和指针都是常量;
const std::vector<int>::iterator iter = vec.begin(); //iter的作用就像是T* const; ++iter;错误
std::vector<int>::const_iterator cIter = vec.begin(); //cIter的作用像个const T*; *cIter = 10;错误
const 修饰函数返回值:将operator*的返回值声明为const类型避免(a*b) = c;这种没意思的赋值动作
const 成员函数:表示该成员函数可以作用于const对象身上
两个成员函数只是常量性不同,可以被重载
bitwise constness:const成员函数不可以更改对象任何non-static成员变量
class CTextBlock{
public:
std::size_t length() const;
private:
char* pText;
sdt::size_t textLength;
bool lengthValid;
};
std::size_t CTextBlock::length() const
{
if(!lengthIsValid)
{
textLength = std::strlen(pText); //错误!在const成员函数内不能赋值给
lengthIsValid = ture; //textLength和lengthValid
}
}
此时可以用一个与const相关的摆动场:mutable(可变的)释放掉non-static成员变量的bitwise constness约束
class CTextBlock{
public:
std::size_t length() const;
private:
char* pText;
mutable sdt::size_t textLength;
mutable bool lengthValid;
};
std::size_t CTextBlock::length() const
{
if(!lengthIsValid)
{
textLength = std::strlen(pText); //现在可以改变textLength
lengthIsValid = ture; //和lengthValid
}
}
在const成员函数和non-const成员函数中避免重复:用non-const调用const兄弟经过两次转换,反向做法不应该const成员函数不改变其对象的逻辑状态
class TextBlock{
public:
const char& operator[](std::size_t position) const
{
......
return text[opsition];
}
char& operator[](std::size_t position)
{
return
const_cast<char&>( //将op[]的返回值的const移除
static_cast<const TextBlock&>(*this)[] //为*this加上const调用op[]
);
}
};
转载于:https://www.cnblogs.com/lidan/archive/2012/01/05/2313793.html
effective C++ 条款 3:尽可能使用const相关推荐
- [Effective C++读书笔记]003_条款03_尽可能使用const
参考同事博客:http://www.cnblogs.com/hustcser/archive/2012/10/19/2731085.html 转载于:https://www.cnblogs.com/a ...
- Effective C++ 条款1、2、3、4
以下内容均来自Scott Meyers大师所著Effective C++ version3,如有错误地方,欢迎指正!相互学习,促进!! 条款1 视C++为一个语言联邦 理解C++,须认识其主要的次语言 ...
- 【Effective C++ 条款03 笔记】尽可能使用const
条款03:尽可能使用const 一.顶层const和底层const 区分一下: int a = 1; const int* pa = a;//底层const,a的值不能变 int b = 2; int ...
- Effective C++ 条款02:尽量使用const,enum,inline替换#define
Effective C++ 条款02:尽量使用const,enum,inline替换#define 用另一句话说:用编译器代替预处理器比较好. 举个例子:加入定义一个常量: #define ASPEC ...
- 条款 03:尽可能使用const
条款 03:尽可能使用const 1.请记住 2.原因 3.const用法 3.1.在classes外部修饰global或namespace作用域中的常量 3.2.修饰文件.函数.或区块作用域中被声明 ...
- char* 赋值 const char* 释放_Effective C++读书笔记之条款3:尽可能使用const
点击上方蓝字关注我们 C++的const关键字会强制编译器实施保持某个值不变的约束,帮助你在编译期间就能发现错误,灵活使用const能提高代码质量还能避免不想被改变的值被修改.下面我将从const作用 ...
- Effective C++条款粗略总结
文章目录 Effective C++ 1.类/结构体 2.资源管理 3.实现 4.模板与泛型编程 5.定制new和delete 6.其他 Effective C++ 1.类/结构体 1.把C++看成一 ...
- effective c++条款11扩展——关于拷贝构造函数和赋值运算符
effective c++条款11扩展--关于拷贝构造函数和赋值运算符 作者:冯明德 重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符. 以下讨论中将用到的例 ...
- Effective C++条款09:绝不在构造和析构过程中调用virtual函数
Effective C++条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruc ...
- effective c++条款44 将与参数无关的代码抽离templates
effective c++条款44 将与参数无关的代码抽离templates 首先了解这个条款的含义:使用template可能导致代码膨胀,二进制码会带着重复(或者几乎重复)的代码.数据,或两者.其结 ...
最新文章
- R使用深度学习LSTM构建时间序列预测模型
- linux脚本获取当前用户,bash shell 获取当前正在执行脚本的绝对路径
- 第二次作业— —结对项目
- 谁偷走了程序员的时间??
- python程序占用内存高_如何优化Python占用的内存,面试必学
- 正则查找倒数第二个符合条件的字符串_EXCEL正则表达式的基础语法
- java 读 jar外文件_读取Jar包外面的配置文件
- linux查看log软件
- eclipse使用git合并_IntelliJ IDEA完整使用教学:从小白到大牛的必经之路!
- displayTag
- 安装ahci驱动sata
- 计算机软件著作权查看,计算机软件著作权查询方式有哪些
- FIR窗函数和IIR模拟、数字滤波器的MATLAB实现
- axure中备注线_axure 备注怎么写
- 解决微信图片不可引用的问题
- [Java基础]JAVA的SWITCH语句(String)
- java同时访问多个接口
- html5定义一个变量,JavaScript 变量
- Win7Codecs+设置程序中英文对照
- 精彩的javascript代码(包括表单校验等等)
热门文章
- Linux 下 10 个最“危险”的命令,开发者应该了解
- 【收集】前端技能知识图谱
- 数据库---查询(详细)
- facebook有哪些信息_关于Facebook表情表情符号的所有信息
- 控制台ui_设计下一代控制台UI
- Android通过透明度设置背景变暗
- HDU1561:The more, The Better——题解
- Xcode 8带来的新特性和坑
- [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE 原创陈本峰2009-02
- repomd.xml错误14 not found