C++ const 简单小结

const 简单小结

 const 变量

const 放在变量前边时这个变量就变得不可修改,和常量类似,但实际上还是变量,例如本地变量进入函数才有,离开函数会消失。

const int x = 233;      //这里必须初始化,或者用下面的方法
extern const int x;     //另一种声明const变量的方法可以不赋值  这是个声明!!!

x = 27;  //error
x++;     //error

int y = x;    //ok ,   copy const to non-const
y = x;        //ok ,   一样
当const变量当数组值时
const int i = 10;
int m[i];   //ok

int x;
cin >> x;
const int i = x;
int m[i];     //error
const指针

const指针有两种可能,一种是这个指针是const的,或者指针所指的变量是const的。

Class1 a1;
const Class1* a = &a1;     //对象是const
Class1 const* a = &a1;     //对象是const
Class1 *const a = &a1;     //指针是const

//这两种的区别在与
	  //a是const :
char *const a = 'as';
*a = 'c';        //OK
a++;             //error
	//指针所指的对象是const:   不可以通过这个指针来修改其对象,这个对象并不是const
const chat* a = 'as';
*a = 'c'         //error

需要注意的是 :指针所指的对象是const的意思是不可以通过这个指针来修改其对象,这个对象并不是const

表格可以增强理解:

表格int i ;const int ci = 3;
int * ip;ip = &i;ip = &ci ;//error
const int * cip;cip = &i;cip = &ci;

const 的 ci 不能传给非const的指针,因为这样就取消了const对变量的保护。
普通变量可以传给const的指针,但是无法通过*cipi 进行修改。

函数参数是const
void fun(const int* p);
int a = 5;
fun(&a);            //OK

const int b = a;
fun(&b);            //OK
b = a + 1;          //error

const 参数保证在函数内无法对传进来的指针对象进行修改。

const的返回类型
const int f1(){return 1;}
 
int f2(){return 1;}
 
int main(){
    const int j = f1();    //OK
    int k = f2();          //OK
    return 0;
}

Const 修饰返回值分三种情况。
A:const 修饰内置类型的返回值,修饰与不修饰返回值作用一样。
B: const 修饰自定义类型的作为返回值,此时返回的值不能作为左值使用,既不能被赋值,也不能被修改。
C: const 修饰返回的指针或者引用,是否返回一个指向 const 的指针,取决于我们想干什么。

const 对象 成员函数

定义为const的对象不能再修改,所以我们需要const成员函数

class Test
{
public:
    Test(int m,int t):cm(m),ct(t){}
    int f()const
    {
        ++cm;        // error
        ++ct;        // OK
        return cm;   //OK
    }
private:
    int cm;
    mutable int ct;    //被 mutable 关键字修饰的成员可以处于不断变化中
};

成员函数需要在定义和声明中重复const的使用

int day() const;
int day() const {return day;};

不修改数据的成员函数应该声明const,const成员函数对于const对象是安全的。1


  1. 个人学习笔记。 ↩︎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值