前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/C++中const的作用总结

C/C++中const的作用总结

原创
作者头像
_咯噔_
修改2022-03-31 18:00:22
9490
修改2022-03-31 18:00:22
举报
文章被收录于专栏:CS学习笔记CS学习笔记

1、const修饰非指针型变量

定义只读变量,即常量 

  • #define和const有什么区别

1)#define定义的常量没有类型,所给出的是一个立即数;const定义的常量有类型名字,存放在静态存储区。

2)处理阶段不同,#define定义的宏变量在预处理时进行替换,const所定义的变量在编译时确定其值

3)宏定义只是做简单的替换。而const定义需要检查类型安全。

4)当定义局部变量时,const所定义的变量的作用域,仅限于const定义所在的函数段;而使用宏定义#define,是从定义点到整个程序的结束。

5)#define定义的常量是不可以用指针去指向,const定义的常量可以用指针去指向该常量的地址

6)#define可以定义简单的函数,const不可以定义函数

2、const修饰指针型变量

代码语言:javascript
复制
 //1. 
  //指针pString1指向的字符串不可修改。
  //指针pString1的内容可以修改。
  const char *pString1 = pTmp;
  pString1[1] = 'd';    //报错
  pString1 = pAnother;    //合法
代码语言:javascript
复制
//2.
  //指针pString3指向的字符串可修改。
  //指针pString3的内容不可修改。指针pString3必须初始化。
  char * const pString3 = pTmp;
  pString3[1] = 'd';    //合法
  pString3 = pAnother;    //报错

3、const修饰函数返回值

如果我们的函数的返回值是以 指针形式 返回的,如果在函数前面加上const修饰,则表示指针指向的内容是不能被改变的,并且接收返回值的指针变量必须是const修饰的。函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。不要轻易的将函数的返回值类型定为const,除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;

4、const修饰函数参数

b.参数指针所指内容为常量不可变

void function(const char* Var);

d.参数为引用,为了增加效率同时防止修改。

void function(const TYPE& Var); //引用参数在函数内为常量不可变

两者效果是一模一样的,前者是值传递,后者是地址传递,所以这种传递比按值传递更有效.

5、类相关const

(1)const修饰成员变量

const修饰类的数据成员,表示成员常量,不能被修改,不能在类定义处初始化,不能在构造函数里初始化,只能在初始化列表中赋值。

代码语言:javascript
复制
class A
{
…
const int nValue; //成员常量不能被修改
…
A(int x): nValue(x) { } ; //只能在初始化列表中赋值
}

(2)const修饰成员函数

const修饰类的成员函数,则该成员函数不能修改类中任何非const数据成员。

代码语言:javascript
复制
class A
{
…
void function() const;
// 上面类中的成员函数func,因为成员函数的参数中会默认带上一个指向本类的实例化对象的this指针,
// 而后面的const修饰的就是这个this指针,表示this指向的变量的值在本函数中是不能被改变的,这就是这个const的作用。
}

// a. const成员函数不允许修改它所在对象的任何一个数据成员。

// b. const成员函数只能调用类的const成员函数。

对于const类对象/指针/引用,只能调用类的const成员函数,任何非const成员函数都不能被调用。因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、const修饰非指针型变量
  • 3、const修饰函数返回值
  • 4、const修饰函数参数
  • 5、类相关const
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档