您的位置:首页 > 编程语言 > C语言/C++

c++,c语言中的const用法

2017-05-02 20:55 155 查看
int a = 10;

const int *b = &a;     //情况1

int const *b = &a;     //情况2

int *const b = &a;    //情况3

const int *const b = &a;   //情况4

如果const 位于星号的左侧,则const 就是用来修饰指针所指向的变量,即指针指向为常量;

如果const 位于星号的右侧,const就是修饰指针本身,即指针本身是常量。

因此,1和2的情况相同,都是指针所指向的内容为常量(与const放在变量声明符中的位置无关),这种情况下不允许对内容进行更改操作。

 

假如b是一名仓库管理员,他所进入的仓库,里面的货物(*b)是他没权限允许动的。

         int b = 20;

        const int *a = &b;

        //*a = 600; //wrong

        printf("a=%d,b=%d\n",*a,b);

        b = 33;

        printf("a=%d,b=%d\n",*a,b);

        int c = 44;

        a = &c;

        printf("a=%d,c=%d\n",*a,c);

另外

const int *e; 初始化正确

 

对于情况3,指针本身是常量,这种情况下不能对指针本身进行更改操作,而指针所指向的内容不是常量。

假如 b 是一名仓库管理员,他只能进入指定的仓库,而不能去别的仓库(b++ 是错误的),但是这个仓库的货物(*b) 可以随便动的

 

   //int *const f; wrong 必须初始化

      int *const h = &b;

       printf("b=%d,h=%d\n",b,*h);

       *h = 73;

       printf("b=%d,h=%d\n",b,*h);

 

对于情况4 为指针本身和指向的内容均为常量。那么这个仓库管理员只能去特定的仓库,并且仓库里面所有的货物他都没有权限去改变。

 

const修饰函数时,表示函数是只读

如果把const放在函数声明前,说明函数返回值是常量

 

const与#define相比

const有数据类型,可调试

#define 字符替换,没有安全检查

 

c++ 类里面的数据成员加上mutable,修改为const的成员变量,可以修改成员

 

void test13()

{

        class C

        {

                public:

                        C(int i):m_c(i)

                        {

                        }

                int incr()const

                {

                        return ++m_c;

                }

                int decr()const

                {

                        return --m_c;

                }

                private:

                        //mutable int m_c;
                         int m_c;

        };

        C c1(0),c2(10);

        for(int tmp,i=0;i<10;i++)

        {

                tmp = c1.incr();

                cout<<setw(tmp)<<setfill(' ')<<tmp<<endl;

                tmp = c2.decr();

                cout<<setw(tmp)<<setfill(' ')<<tmp<<endl;

        }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: