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

来源:互联网 发布:非农数据对石油的影响 编辑:程序博客网 时间:2024/05/17 23:31

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;
        }
}

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0