const用法
const的用法:
主要是分为三大类:1.修饰变量,不管是修饰类内的变量还是类外的变量。
2.修饰函数, 比如常成员函数。
3.修饰函数的形参。
1.修饰变量:主要是const和指针的联合使用。首先我们来看看几个例子:
const char *p; //non-const pointer, const data
char const *p; //同上
char *const p; //const pointer, non-const data
const char *const p ; //const pointer, const data
从上面的例子中看书,主要是看const的位置,具体是指什么位置呢? 就是关键字const出现星号左边还是星号的右边,根据《effective c++》上面描述:如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量。
所以这就引出了两个概念:
常量指针:指针指向的内存地址的内容是不可修改的;
指针常量:指针的常量,他是不可改变地址的指针,但可以对它所指向的内容可以进行修改。
这些都是描述的build-in类型的,如果const关键字修饰的是一个类的对象呢(即 const 类型说明符 对象名)?它的用法又是怎样的呢?
EX:
class Test { public: Test(int i, int j): x(i), y(j) { } private: int x; int y; };
const Test test(3,4); // test是常对象,不能被更新
常对象:他的数据成员值在对象的整个生存期间内不能被改变。也就是说,常对象必须进行初始化,而且不能给更新。
2.修饰函数:主要是分为两种:一种就是常成员函数,另一种就是修饰函数的返回值。
1、const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。例如:
void test() const;
void test();
同时const还可以用来区分重载。
2、用于修饰函数的返回值,
const修饰函数返回值其实用的并不是很多,它的含义和const修饰普通变量以及指针的含义基本相同。
(1) const int test1() 这个其实无意义,因为参数返回本身就是赋值。
(2) const int * test2()
调用时 const int *pValue = test();
我们可以把fun2()看作成一个变量,那么就是我们上面所说的1.1的写法,即指针内容不可变。
(3) int* const test3()
调用时 int * const pValue = test2();
我们可以把test2()看作成一个变量,那么就是我们上面所说的1.2的写法,即指针本身不可变。

浙公网安备 33010602011771号