C++中的const

1.const含义


const,英文全称constant,意为不变的,用const修饰的类型叫常类型。用来修饰内置型变量(int,char...),自定义对象,函数(返回值,函数参数),类里的成员函数

2.const 定义常量


2.1 const定义常量有两个特性:

  1. 因为定义的是常量,所以在定义是就要初始化

  1. 不能修改其值

const int a=10;

a=9;//报错,表达式左边必须是可修改的左值

2.2 const对象默认为文件局部变量

a. 未被const修饰的变量可直接用extern关键字使用
//p.cpp
inta=10;//定义一个变量
​
//q.cpp
externinta;//声明a为其他文件下定义的变量并引入
cout<<a;//输出10
b.被const修饰的变量要在其他文件使用声明时需要用extern关键字修饰

错误示例:

//p.cpp
constinta=10;//定义一个变量
​
//q.cpp
externconstinta;//
cout<<a;//编译时报错

正确:

//p.cpp
externconstinta=10;//定义一个变量
​
//q.cpp
externconstinta;//
cout<<a;//输出10

2.3 const与#define的区别

const常量具有类型,编译器可以进行类型检查,#define只是简单的字符替换

3.const与指针


重点区分const是修饰的指针,还是修饰的指针指向的变量

int a=10;
int *b=&a;//含义:定义一个指向变量a的指针,int为指向变量的类型,b为指针,实际为值为变量地址的变量;a和b的值都可以改变
const int *b=&a;//含义:定义一个指向常整型(const int)变量的指针,变量a值不能被改变,指针b的值可以改变
int *  const b=&a//含义:定义一个指向变量a的常指针,变量a的值可以改变,指针b的值不能改变(指向的内存地址不改变)
const int * const b=&a;//含义:定义一个指向常整型(const int)的常指针,变量a的值不能改变,指针b的值也不能改变

4.const与函数


const 可修饰:函数返回值,函数参数

4.1 const修饰函数返回值

(1)const int

const int func1();

这个本身无意义,因为参数返回本身就是赋值给其他的变量!

(2)const int*

const int* func2();

指针指向的内容不变。

(3)int *const

int *const func2();

返回常指针,其值不能改变,但其指向的变量值可改变

4.2const修饰函数参数

void func(const int var); // 传递过来的参数不可变

void func(int *const var); // 指针本身不可变

void func(const int *var);//指针指向内容不可变

5.const与类


在一个类中,任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。

使用const关键字进行说明的成员函数,称为常成员函数。只有常成员函数才有资格操作常量或常对象,没有使用const关键字进行说明的成员函数不能用来操作常对象。

类的非静态成员函数后可以加const修饰,表示该类的this指针为const类型,不能改变类的成员变量的值,即成员变量为read only,任何改变成员变量的行为均为非法。此类型的函数可称为只读成员函数,格式为:

returnType functionName(param list) const

1.修饰数据成员

被const修饰的数据成员不能被修改

2.修饰成员函数

使用const关键字进行说明的成员函数,称为常成员函数。只有常成员函数才有资格操作常量或常对象,没有使用const关键字进行说明的成员函数不能用来操作常对象。

类的非静态成员函数后可以加const修饰,表示该类的this指针为const类型,不能改变类的成员变量的值,即成员变量为read only,任何改变成员变量的行为均为非法。此类型的函数可称为只读成员函数,格式为:

returnType functionName(param list) const 意义: const承诺不会修改数据成员 能访问const和非const数据成员 但不能修改非const数据成员 只能访问const成员函数

//例子
class A {
 public:
    int a_;//成员变量后加_,规范
    A(int value) :a_(value) {
        cout << "构造";
    }
    void func()const {//
        //a_=100;//报错,不能修改数据成员
        cout << a_;
    }
    const int func_() {//表明返回值是const int类型
         a_ = 100;
         return a_; 
    }
    };

3.修饰类对象

const修饰对象,是从对象层面,不修改数据,只能调用const成员函数

知乎链接:

C++中的const总结 - DCBAE1的文章 - 知乎https://zhuanlan.zhihu.com/p/606360297

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值