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的写法,即指针本身不可变。

 

 

posted @ 2013-07-18 21:58  mixu  阅读(220)  评论(0)    收藏  举报