Z03 C++中const的通常用法
2017-10-30 21:48
295 查看
1、指针与const
可以用两种不同的方式将const关键字用于指针。第一种方法是让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的值。第二种方法是将指针本身声明为常量,这样可以防止改变指针指向的位置。1)指针指向一个常量对象
#include <iostream> using namespace std; int main(void) { int age = 29; const int * pt = &age; *pt = 30; //注意:第8行,程序报错,不能给常量赋值 cout << "age: " << age << endl; system("pause"); return 0; }说明:程序中pt指向const int(此处为29),因此不能用pt来修改这个值。但是,pt的声明并不意味着它指向的实际上就是一个常量,而只是意味着对于pt而言,这个值是常量,可以通过修改age变量来修改age的值,如下所示:
#include <iostream> using namespace std; int main(void) { int age = 29; const int * pt = &age; age = 30; //注意:第8行,程序不会报错。 cout << "age: " << age << endl; system("pause"); return 0; }说明:C++中const变量的地址可以赋给const变量的指针,此时age的值既不能通过age变量修改也不能通过pt来修改,如下所示:
#include <iostream> using namespace std; int main(void) { const int age = 29; const int * pt = &age; age = 30; //注意:第8行,程序报错,const变量的地址可以赋给const变量的指针。 cout << "age: " << age << endl; system("pause"); return 0; }使用const的理由:
可以避免由于无意间修改数据而导致的编译错误;
使用const使得函数能够处理const和非const实参,否则将只能接受非const数据。如果条件允许,应将指针形参声明为指向const的指针。
2)指针本身声明为常量
#include <iostream> using namespace std; int main(void) { int age = 29; const int * pt = &age; int height = 30; pt = &height; cout << *pt << endl; //注意:*pt输出为30 cout << "age: " << age << endl; system("pause"); return 0; }说明:开始时pt指向const int使得pt不能修改age的值,但是如上程序不能防止修改pt的值,当pt为&height时,*pt的值为30,即此时pt不能修改height的值。
若使pt的值也不能改变,应使用下面声明,此时pt的值不能改变切pt指向的值也不能改变:
#include <iostream> using namespace std; int main(void) { int age = 29; const int * const pt = &age; //使用这种结构 int height = 30; pt = &height; //注意:第9行,程序报错 cout << "age: " << age << endl; system("pause"); return 0; }
2、为何将const用于返回类型的引用
const free_throws& accumulate(free_throws& target, const free_throws& source)说明:返回类型使用const引用后不允许给accumulate()类似赋值操作,如下所示
accumulate(参数1, 参数2) = four; //不允许修改accumulate()
3、const为类成员函数
const Stack land = Stack("ABC") land.show();说明:对于类Stack声明为const后,第二行show()的原型为void show()代码会编译错误,因为show()的代码无法确保调用对象不被修改。要保证不出现错误,则一种方法是将const加载show()函数后面,如下所示:
void show() const;
原理如下:
a、当类对象时const时表示对象不能修改,而当其调用成员函数时non-const时,成员函数表明可以修改对象。两者发生矛盾,所以不予许出现这种现象;
b、如果当成员函数的const和non-const版本同时存在,const object只能调用const member functions,non-const object 只能调用non-const member functions。
4、this指针的const用法
const Stock& topval(const Stock& s) const;说明:程序中类为Stock,topval()为比较两个Stock对象,其中第一个const
9304
为返回const引用,第二个const表明,该函数不会修改被显式地访问的对象 s。最后一个const表明,该函数不会修改被隐式地访问的对象 this。因此返回类型为第一个const 引用。
相关文章推荐
- C++中const的用法【03】----类
- C++ const用法 尽可能使用const
- C++中const用法总结
- C++四种强制类型转换符功能以及用法总结(dynamic_cast,const_cast,static_cast,reinterpret_cast)
- C++中const用法总结
- C++的那些事:const用法面面观
- C/C++中const关键字的用法及其与宏常量的比较
- C++中的const的用法
- C++中const的作用/用法
- C/C++ const类型用法总结
- C++中const用法总结
- C/C++沉思-----const的简单用法
- c/c++中关键字static和const的用法
- C++中const、volatile、mutable的用法
- C++ const用法 尽可能使用const
- C++中的const用法【02】----函数的参数和返回值
- C++中static_cast、const_cast、reinterpret_cast的用法举例,附带举例说明强制类型转换时int和int&的区别
- c++基础:新标准constexpr基本用法及其他注意点
- C++中 const的用法
- C/C++语言中const的用法