C++箴言:只要可能就用const

C++箴言:只要可能就用const,第1张

C++箴言:只要可能就用const,第2张

关键字const是非常通用的。在类之外,可以将它用于空之间的全局常量或命名常量,就像那些在文件、函数或模块范围内声明为静态的对象一样。在类内部,您可以将它用于静态和非静态数据成员。对于指针,可以指定指针本身是const,或者它指向的数据是const,或者两者都是,或者都不是。

char greeting[]= " Hello ";

char *p =问候语;//非常数指针,

//非常数数据

const char * p = greeting//非常数指针,

//常量数据

char * const p = greeting//常量指针,

//非常数数据

const char * const p = greeting//常量指针,

//常量数据

这个语法本身并不像看起来那么反复无常。如果const出现在*的左边,指针指向的内容是常量;如果const出现在*的右边,指针本身就是常量;如果const出现在*的两边,那么两者都是常数。

当指针指向一个常量时,有的人把const放在类型之前,有的人把const放在类型之前的*之后。这两者在意义上没有区别,因此以下两个函数具有相同的参数类型:

void f1(const Widget * pw);// f1接受一个指向

//常量小部件对象

void F2(Widget const * pw);//F2也是如此

因为它们都存在于实际代码中,所以您应该习惯这两种形式。

STL迭代器是基于指针的,所以迭代器的行为非常类似于T*指针。将迭代器声明为const类似于将指针声明为const(即声明T* const指针):不能将迭代器指向不同的东西,但是它所指向的东西可以改变自己。如果希望迭代器指向不能改变的东西(即const T*的STL等价物),应该使用const _ iterator:
STD::vector vec;

...

const STD::vector::iterator ITER =//ITER的行为类似于T* const

vec . begin();

* iter = 10//好,更改iter指向的内容

++ ITER;//错误!iter是常量

STD::vector::const _ iterator cIter =//cIter的行为类似于const T*

vec . begin();

* cIter = 10//错误!*cIter是常量

++ cIter;//好,更改cIter

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++箴言:只要可能就用const

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情