啃书《C++ Primer Plus》之 const修饰符修饰 类对象 指针 变量 函数 引用

本文详细探讨了C++中的const修饰符,包括const与变量、宏定义、类和对象、函数、引用及指针的关系。const用于创建只读变量,防止意外修改,同时在类、函数和指针中有着重要的应用。const修饰的类对象、成员常量、成员函数、引用和指针各有其特定规则和注意事项。

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

笔者正在学习C++语言,啃书系列将会持续更新,希望可以同大家一起学习,一起进步。

系列文章:
啃书《C++ Primer Plus》之 C++ 函数指针
啃书《C++ Primer Plus》之 C++ 名称空间1
啃书《C++ Primer Plus》之 C++ 名称空间2
啃书《C++ Primer Plus》之 C++ 引用


const修饰符是C与C++语言中很常见也很常用的修饰符,但是他的用法很多很杂,在书上多次出现。由于这是一个非常重要的关键字,本文就来针对这个关键字进行总结:
在这里插入图片描述


const与变量

我们最先说起的 const 的用途是它最常见的,用于修饰一个变量。const 本意是"常量的",意味着一个被 const 修饰的变量是只读的,即在初始化之后便不能再修改它的值。因此,被 const 修饰的变量常被当做常量来使用。

在此,需要强调一个关键点:
const常量必须进行初始化!!
const常量必须进行初始化!!
const常量必须进行初始化!!

特别的,我们需要讨论下声明在全局的 const 常量。

const与宏定义

在C++的新标准中,声明在全局的 const 常量的连接性默认为内部的,也就是说一个声明在全局的 const 常量是自带 static 修饰的。(连接性为内部表明,这个变量的作用域为同一个文件中该变量的声明语句之后的全部区域,而其他文件则不能访问。有关进一步的内容,我们将在内存模型那一节谈到。)
这就使得 const全局变量起到了宏定义常量的作用,那么他们的区别有哪些呢?

  1. 二者的产生作用的方式与阶段不同。宏定义是在预处理阶段,并使用类似于搜索替换的方式。而 const 修饰的常量则是在程序编译阶段进行初始化的
  2. 另外,const 是有类型的,而宏定义是没有类型的,这在程序员使用常量方面的帮助很大,他能够有效的避免类型问题。
  3. 还有一点重要的是,const 修饰的变量是被当做特殊的变量看待的,他们具有连接性,更方便进行文件间常量的相互使用

const与类和对象

除了基本变量之外,类对象或是结构也是经常被 const 修饰的对象,而 const 在类与对象上的使用不仅限于修饰对象,也包括修饰类的成员变量以及类变量。

const修饰的类对象

同 const 修饰一般变量很相似的是,被 const 修饰的类对象也是在初始化后不能再发生改变,这里的改变主要指的是其中的成员变量,但是有一种关键字 mutable 可以修饰成员变量,使得即使对象是被 const 修饰的,也可以改变这个成员的值。
请看下面的例子:

#include<iostream>
using namespace std;
class A
{
   
public:
    int k;
    mutable int s;
    A(int k,int a)
    {
   
        this->k = k;
        this->s = s;
    }
};
int main()
{
   
    const A a
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值