600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > const 常量_条款03:尽可能使用const

const 常量_条款03:尽可能使用const

时间:2019-11-03 12:08:04

相关推荐

const 常量_条款03:尽可能使用const

const 允许你指定一个语义约束(也就是指定一个“不该被改动”的对象),而编译器会强制实施这项约束。

1、const指针

如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量。

关键字const出现在类型前后类型后星号前,意义都是相同的,表示被指物是常量。

例:intconst* a 等价于constint *a

STL中的迭代器以指针为根据塑造出来的,所以迭代器的作用就相当于T*指针。声明迭代器为const就像声明指针为const一样(即声明一个T* const 指针),表示这个迭代器不能指向别的不同的东西,但他所指的值是可以改变的。如果你希望迭代器所指的东西不可被改动(即希望STL模拟一个const T*指针),这时候就需要的是const_iterator。两种格式:

const std::vector<int>::iterator

std::vector<int>::const_iterator

2、const 成员函数

将const 实施于成员函数的目的,是为了确认该成员函数可作用于const对象身上。

1、const成员函数的接口比较容易被理解,可以得知哪个函数可以改动对象,哪个函数不可以改动对象

2、是操纵 const 对象成为可能

两个成员函数如果只是常量性(constness)不同,可以被重载。

3、两个阵营:bitwise constness 和 logical constness

bitwise const阵营相信:成员函数只要在不更改对象的任何成员变量(static 除外)是才可以说是const。也就是说它不更改对象内的任何一个bit。

const成员虽然保证了成员变量值不会被改变,但是如果这个变量是指针或者引用,那么可以通过这个指针或引用去改变被指物。随便改变了值,但依然可以通过编译器编译。这里面虽然是满足了bitwise const

logical constness 阵营不主张:一个const成员函数可以修改它所处理的对象内的某些bits,但只有在客户端侦测不出的情况才可如此(没理解啥意思)

const成员函数中想要修改成员变量的话,在声明变量的时候在前面加上mutable即可。

4、在const 和 non-const 成员函数中避免重复

假若const 重载 non-const函数,但是其中的操作都是一样的,那么就会造成代码重复。可以让non-cosnt 函数去调用const函数。不过在调用过程中需要经过两次转型,1、将non-const的this指针转换为const指针2、将返回值得const去掉

请记住:

将某些东西声明为 const 可帮助编译器侦测出错误用法。 const 可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)当const 和 non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复

本文主要内容来自于侯捷老师译的《Effective C++》,大力推荐感兴趣的同学可以去购买。也欢迎大家交流!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。