首页 > 学院 > 开发设计 > 正文

关于const的小结

2019-11-06 08:11:46
字体:
来源:转载
供稿:网友

    在c++中,const是一个非常重要的限定符,用以限定声明的含义。不能仅仅将其含义解释为常量,似乎更准确一点的含义是“只读”。

    一、const的各种用法:

    1、修饰变量

    const int a/int const a:表示a是一个常量。

    const int *a:表示a是一个指向常量的指针,*a是不能被修改的,但是a可以被修改。

    int * const a:表示a是一个指向整数的常指针,a是不能被修改的,但是*a是可以被修改的。

    const int * const a:表示a是一个指向常量的常指针,*a是不能被修改的,a也是不能被修改的。

    2、在函数参数中使用const

    传递过来的参数在函数内不能改变,与修饰变量性质一样。

    void display(const int a,int b){a=5;}//错误。

    3、const修饰成员函数

    (1)const修饰的成员函数不能修改任何的成员变量(mutable修饰的变量除外)。

    (2)加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用.const成员函数不能调用非onst成员函数,因为非const成员函数可能会修改成员变量。

    void testConstFunction(int _x) const    {        x=_x;错误,在const成员函数中,不能修改任何类成员变量        modify_x(_x);错误,const成员函数不能调用非onst成员函数,因为非const成员函数可以会修改成员变量    }    void modify_x(int _x)    {        x=_x;        }

    只要类方法不修改调用对象,就应该将其申明为const。

    4、const修饰函数返回值

    若函数的返回值是指针,且用const修饰,则函数返回值指向的内容是常数,不可被修改,此返回值仅能赋值给const修饰的相同类型的指针。如果返回值是对象,要注意确定函数究竟是想返回一个对象的“copy”,还是仅返回对象的“别名”。

    二、为什么要使用const:

    1、关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。可以避免无意中由于修改数据造成的编程错误。

    2、使用const使得函数能够处理const和非const实参。

    3、通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。

    三、const和#define的区别

    const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝。    #define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。     #define宏没有类型,而const修饰的只读变量具有特定的类型。

   


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表