如果某个值需要保持不变,那么你就应该说出来,这样编译器能确保这写约束不被违反。const可以放于很多位置。
1. 作用于指针
1 | char greeting[] = "hello"; |
const的出现位置[左数右针]:
const *
,数据是常量,表示被指向的对象是常量,而指针是可以变的。* const
,表示指针是常量。这个指针不能指向不同的东西,但它指向东西的数据可以改变。const * const
,表示指针和被指向的对象都是常量
对于在*左侧,下面两种表达意义相同,都在左侧:
1 | const char* greeting; |
2. 作用于特殊指针,iterator
对于STL中的迭代器,加入我希望迭代器所指向的东西不可被修改(即对数据只读),那么就需要一个const_iterator
:
1 | vector<int> vec; |
而另一种情况,指针不能改变其指向,但是可改变其所指向数据:
1 | // 指针const |
3. 作用与函数
函数返回值为const
将函数返回值声明为const,这个返回值不能被修改。降低了因为用户的错误而造成的意外。
函数参数为const
除非你要改动局部变量(函数参数),否则将参数声明为const。
4. 作用与类成员函数
即const位于成员函数()和{}之间,如:
1 | class foo { |
print()成员函数,为const函数,表示这个成员函数不能修改成员变量。所以不能将area()成员函数设为const,因为这个函数的 目的就是为成员变量赋值。
const成员函数,和非const成员函数使得我们知道一个类中哪些函数可以修改成员属性,哪些不可以。
tip:
提升c++程序效率的一个方法是以pass by referrence-to-const
的方式或pass by pointer-to-const
传递对象:
1 | // 此为以成员函数 |