const修饰符

  • const修饰的只读变量

    如下定义是错误的,因为C编译器并不知道其在编译期间的值。
    const int SIZE=10;
    int buf[SIZE];

  • const修饰指针

    指向const的指针:指针可变,指针所指对象不可变
    const int *p;
    int const *p; //p可变,p指向的对象不可变
    const指针:指针不可变,指针所指对象可变
    int * const p; //p不可变,p所指对象可变
    指向const的const指针:指针不可变,指针所指对象也不可变
    const int * const p

  • const修饰函数参数

    const只能修饰输入参数,如果输入参数采用指针传递,那么加const修饰可以防止函数体内意外的修改该指针。

    如果采用值传递,由于函数会自动产生临时变量用于复制该参数,该出入参数本来就无需保护。
    对于非内部数据类型的输入参数,应将值传递的方式改为const引用传递。

    如果参数作输出用,不论是什么数据类型,也不论采用指针还是引用传递,都不能加const修饰,否则该参数将失去输出功能。

  • const修饰函数返回值

    返回指针时,若加const修饰,那么函数返回值的内容不能被修改,而只能赋值给加const修饰的同类型指针。
    const char * getString(void);
    char *str=getString(); //错误
    const char *str= getString();
    char const *str = getSting();

    函数返回引用时,是为了实现链式表达式(类的赋值函数),若再加const修饰,那么返回值的内容不能被修改。
    class Base
    {

    Base &operator=(const base &r)

    };
    Base obj1, obj2, obj3;

    obj1=obj2=obj3;

    函数返回一个值时(返回值采用值传递方式),函数会把返回值复制到外部临时存储单元,加const修饰无用。

  • const成员函数

    class Base
    {
    void fun();
    void fun() const; //常成员函数
    };

    函数末尾加const改变了隐含的this指针,(this作为一个默认的形参),使得 this指向的对象为const类型。this本身类型为Base * const,末尾加const后,变为const Base * const,即this指向的对象也为const。这也是fun()函数可以共存的原因,即重载(相同作用域,函数参数列表不同)。

  • const数据成员

    常数据成员必须在构造函数的成员初始化列表中初始化。

    const数据成员只在某个对象的生存期内是常量,对整个类而言是可变的,因为类能实例化多个对象,不同对象其const数据成员的值可以不同。所以不能在类中初始化const数据成员,此时,类的对象还没有被创建,编译器并不知道const数据成员的值。

    要想建立在整个类中都恒定不变的常量,可以考虑枚举常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值