码迷,mamicode.com
首页 > 其他好文 > 详细

const修饰符

时间:2018-07-06 23:32:14      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:价值   其它   调用   修改   指针   错误   pre   指针传递   value   

一、const声明常量

类型前加const修饰符可声明常量。

1、const在类型前面

const int value;                  //value是const
const char *value;                //*value是const, value可变
const (char *) value;            //value是const,*value可变
char* const value;               //value是const,*value可变
const char* const value;     //value和*value都是const

2、const在类型后面

int const value;                // value是const
char const * value;             // *value是const, value可变
(char *) const value;          //value是const,*value可变
char* const value;             // value是const,*value可变
char const* const value;    // value和*value都是const

3.总结

const在左侧指针所指的值不可改变,const在右侧指针不可改变。

二、const与函数

1.用const修饰函数的参数

函数参数类型前加const指明该参数为常量,在函数内部不可改变。

void func(const int x) {
    //x不可以在内部进行赋值等操作.
}

注:当参数为引用传递或者指针传递作为输出时,都不能加const

2.用const修饰函数的返回值

  • “值传递”函数会把返回值复制到外部临时的存储单元中,加const修饰没有任何价值。
  • ”址传递”函数返回值只能被赋给加const修饰的同类型指针。
const int* func(void) //函数声明
...
int* a = func();             //报错
const int* b = func()    //正确
  • 函数引用返回
const int& func(void) //函数声明
...
int a = func();             //正确
const int& b = func()  //正确
int& c = func()           //报错 

3const 成员函数

任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误。

class test
{
public:
    void func(){}
    int getNum(void) const // const 成员函数
    {
        ++num;     // 编译错误,企图修改数据成员m_num
        func();     // 编译错误,企图调用非const函数
        return num;
    }
private:
    int num;
};

const修饰符

标签:价值   其它   调用   修改   指针   错误   pre   指针传递   value   

原文地址:https://www.cnblogs.com/narjaja/p/9275805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!