《C++》基础入门_07——数据的共享保护:const

本文全面介绍了C++编程的基础知识与高级概念,包括数据存储、面向对象编程、函数详解、类模板、异常处理等内容,适合初学者及进阶学习者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下内容为大学期间学习C++语言总结的知识:

《C++》基础入门_01——数据存储,表示形式,基本运算
《C++》基础入门_02——面向对象的总体概括
《C++》基础入门_03——程序的开发过程
《C++》基础入门_04——四大语句
《C++》基础入门_05——函数详解篇
《C++》基础入门_06——面向对象的详述
《C++》基础入门_07——数据的共享保护:const
《C++》基础入门_08——利用数组实现对批量数据的处理
《C++》基础入门_09——指针和引用的讲解
《C++》基础入门_10——用户自定义数据类型详细篇
《C++》基础入门_11——友元的讲解
《C++》基础入门_12——类模板
《C++》基础入门_13——运算符的重载
《C++》基础入门_14——继承与派生
《C++》基础入门_15——多态性
《C++》基础入门_16——输入输出流详讲
《C++》基础入门_17——对象串行化
《C++》基础入门_18——异常处理
《C++》基础入门_19——命名空间
《C++》基础入门_20——文件操作
《C++》基础入门_21——在函数中返回数组的常用方法



一、作用域

  • 函数原型作用域
    函数原型中的参数,其作用域始于"(",结束于")"。
  • 局部作用域
    函数的形参,在块中声明的标识符,其作用域自声明处起,限于块中
  • 类作用域
    1. 作用于特定的成员名。
    2. 类X的成员m具有类作用域,对m的访问方式如下:
      1. 如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以访问成员m。
      2. 通过表达式x.m或者X::m访问。
      3. 通过表达式ptr->m
  • 文件作用域
    不在前述各个作用域中出现的声明,具有文件作用域,这样声明的标识符的作用域开始于声明点,结束于文件尾。
#include <iostream>
using namespace std;
int i; //文件作用域
int main() {
	i = 5;
	{
	int i; //块作用域
	i = 7;
	cout << "i = " << i << endl; //输出7
	}
	cout << "i = " << i; //输出5
	return 0;
}



二、可见性

• 可见性是从对标识符的引用的角度来谈的概念
• 可见性表从内层作用域向外层作用域“看”时能看见什么
• 如果标识在某处可见,则就可以在该处使用此标识符。
• 标识符应声明在先,引用在后。
• 如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。
• 对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。


三、对象的生命期

对象从产生到结束的这段时间就是它的生存期。 在对象生存期内,对象将保持它的值,直到被更新为止。

3.1 静态生命期

1)这种生存期与程序的运行期相同。
2)在文件作用域中声明的对象具有这种生存期。
3) 在函数内部声明静态生存期对象,要加static 。

3.2 动态生命期

1) 块作用域中声明的,没有用static修饰的对象是动态生存期的对象(习惯称局部生存期对象)。
2)开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。

main函数中的a和other函数中的a不属于同一个,他们会开辟两块独立的静态空间
在这里插入图片描述



四、共享数据的保护

常类型的对象必须进行初始化,而且不能被更新。

4.1 常对象:必须进行初始化,不能被更新。

  • 类名 const 对象名

在这里插入图片描述
通过常对象只能调用它的常成员函数。
在这里插入图片描述

4.2 常引用:被引用的对象不能被更新。

const 类型说明符 &引用名

在这里插入图片描述
不可以更改r的指向
在这里插入图片描述

4.3 常数组:数组元素不能被更新

类型说明符 const 数组名[大小]…

4.4 常指针:指向常量的指针



五、用const 修饰的对象成员

5.1 常成员函数

  1. 使用const关键字说明的函数。
  2. 常成员函数不更新对象的数据成员。
  3. 常成员函数说明格式:
    类型说明符 函数名(参数表) const;
    这里, const是函数类型的一个组成部分,因此在实现部分也要带const关键字。
  4. const关键字可以被用于参与对重载函数的区分
  5. 通过常对象只能调用它的常成员函数。
  6. 常成员函数的声明原则
    • 适当地将成员函数声明为常成员函数,能够提高代码质量。
    • 凡是不会改变对象状态的函数,都应当声明为常成员函数。
    • 什么是改变对象状态?
    1. 改变对象状态,不简单地等同于改变成员数据的值。
    2. 只要一个成员函数执行与否,不会影响以后接口函数的调用结果,都认为它不会改变对象状态。
      • mutable关键字使得被修饰的成员对象无视“常对象的成员对象被视为常对象”这一语言原则

在这里插入图片描述

5.2 常数据成员

使用const说明的数据成员。

在这里插入图片描述 在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值