当前位置: 首页 > news >正文

基础面试题:C++中如何理解const修饰符

面试题目:1、题 int i=10;  const int*p = &i;  int *const* p = &i; const在不同位置有什么不

                        同

                  2、const 修饰类成员变量是有什么特殊要求

                  3、const 修饰类成员函数会发什么

                  4、const 对象有什么意义

                        

目录

前言

一、const的意义

二、const使用规则

1.初始化

2.const 修饰指针

1)const靠近谁,谁就是常量

2)或者 左边的是底层const,靠近右边的是顶层const

三、const使用限制

四、const类相关

1、定义数据成员

2、定义常量函数

3、定义const 对象



前言

对于任何语言设定限定符为了是程序设计者不破坏其语言设定的基础规则,使程序能够安全运行和稳定运行。本文对C++ 中const限定符做详细的解析。

一、const的意义

有时候我们希望我们定义的变量,希望它的值不能被修改,只能被使用;另一方面也随时保证警惕防止程序或其他设计者一不小心改变这个值,为了满足这一要求就通过const关键字加以限定 

二、const使用规则

1.初始化

const 修饰的变量在初始化就需要赋初值

const int i = 10;

const char* p = " big bird";

const 初始化时允许任意表达式作为初始值

const int r1 = 40;

const int r2 = r1*50;  

const引用的时候允许类型转换

const double  i = 3.14;

const int &r1 = i; 

其实实际程序做了隐形操作,建立了一个临时变量,真正的执行过程如下:

const double  i = 3.14;

const int &r1 = i;        //隐形操作

const int temp = i;     //隐形操作

const int &r1 = temp;

2.const 修饰指针

指针是对象而不是引用,因此它能像其他对象类型一样,允许把指针本身定义为常量。常量指针必须被初始化

int errorNum = 0;

int *const  currErr = &errorNum;        //就是currErr不能指向其他地址,顶层const

const int *p = &errorNum;                  //currErr可以指向其他地址,底层const,可以改变

                                                           //currErr所指向的内容

const double pi = 3.1415926;

const double *const pip = π           //双保险,地址指向和内容都不能修改

 const 修饰指针时 如果本身是常量,这是顶层const,如果指针可以改变就是底层const

如果以上不好理解,那么可以通过取巧的记忆方法:

1)const靠近谁,谁就是常量

const靠近类型,值就不改变,是底层const,const靠近 * 表明指针不能改变,底层const,如下:

const int *p = &errorNum; 

int *const  currErr = &errorNum;  

2)或者 左边的是底层const,靠近右边的是顶层const

三、const使用限制

        int i=0;

        int *const p = &i;

        int* p1 = p;                        //错误,p是常量类型,无法赋值

        const int a = 10;        

        int &r = a;                        //错误,a是常量,不能被引用成普通变量

四、const类相关

1、定义数据成员

class A
{private const int i;public A(int a);
}class A:A(int a):i(a)
{
}

类的数据成员为常量,那么就要在构造函数中初始化列表中初始化它,不能在构造函数中初始化 

2、定义常量函数

class A
{private string name;public A(string name);public string getName()const;public const string& getNameEx();
}A:A(string n):name(n)
{
}//表明该函数中不能修改成员变量
string A:getName()const
{return name;
}//表明返回值是常量
const string& A::getNameEx()
{return name;
}

如果const修饰返回值,那么返回值是常量,如果修饰的在函数声明后面,那么说明在该函数中不能修改成员变脸的值

3、定义const 对象

在 C++ 中,const 也可以用来修饰对象,称为 常对象 。 一旦将对象定义为常对象之后,就只能调用类的 const 成员(包括 const 成员变量和 const 成员函数)了。

const A* pA = new A("xiaoming");

pA->getName();                //正确,getName是常量成员函数

pA->getNameEx();            //错误,getNameEx不是常量成员函数

http://www.lryc.cn/news/726.html

相关文章:

  • 在RT-Thread STM32F407平台下配置SPI flash为U盘
  • 数据存储技术复习(二)未完
  • 使用 QuTrunk+Amazon Deep Learning AMI(TensorFlow2)构建量子神经网络
  • python selenium浏览器复用技术
  • 第二章:创建虚拟机
  • 码上【call,apply,bind】的手写
  • 代谢组学Nature子刊!抑郁症居然“男女有别”,脑膜淋巴管起关键作用!
  • nacos配置中心搭建
  • uni-app低成本封装一个取色器组件
  • APP 怎么免费接入 MobPush
  • XGBoost
  • 你是什么时候从轻视到高看软件测试的?
  • 基于ssm的航空售票系统
  • 滑动窗口最大值
  • 接口文档参考示例
  • 2010-2019年290个城市经济发展与环境污染数据
  • web开发
  • 【数据结构】优先级队列----堆
  • Python深度学习实战PyQt5信号与槽的连接
  • Window 10 OpenCV 打开罗技(Logitech)摄像头速度慢问题解决
  • 基于yolo的小球位置实时检测
  • 【微服务】Elasticsearch数据聚合自动补全数据同步(四)
  • java面试题(十七)spring
  • 你知道 BI 是什么吗?关于 BI 系统的概述
  • git:详解git rebase命令
  • 第四章——随机变量的数字特征
  • vue2源码阅读理解-响应式数据原理
  • 服务调用分布式session
  • Maven知识点-插件-maven-surefire-plugin简介
  • 如何借力Alluxio推动大数据产品性能提升与成本优化?