IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++:const 关键字 -> 正文阅读

[C++知识库]C++:const 关键字


闲谈

C++语音博大精深,一个关键字有多种不同的用法与用途,有时候看过就懂了,懂了就忘了,忘了就得搜索,搜索还得再看……。因此,在此记录const关键字,以备查看。


const

constconstant的意思,旨在告诉编译器不允许程序对其改动。下面枚举几种用法:

与类无关的const

1. 修饰变量

const int a = 10;

变量a的值是常量,不允许对其修改。
note:const变量(非类成员变量)要在定义的时候必须初始化,且之后不可更改。

2. 可代替宏

宏定义#define无类型检查,新手容易出错,可用constconstexpr实现宏定义的功能,切带有类型检查,使用较安全,因此C++推荐使用。例如:

#define X 1 + 2
constexpr int Y = 1 + 2;
// X * 3 = 7,也就是1+2*3=1+6=7
cout << "X * 3 = " << X * 3 << endl;
// Y * 3 = 9,也就是(1+2)*3=9
cout << "Y * 3 = " << Y * 3 << endl;

如果不太了解#define可能会觉得X*3应该等于9,但其实等于7,使用const可以避免。

3. 指定数组长度

在C++中可以用const类型变量声明一个数组的具体的长度,但要注意C语言不行:

const int len = 10;
char ch[len];

4. 修饰指针

修饰指针有分顶层const底层const,如下:

int a = 10;
const int *p1  = &a;		// 底层const,不允许对指针p1指向的内容修改,指针可移动。
int * const p2 = &a;		// 顶层const,不允许指针移动,但可以修改指针p2指向的内容。
const int * const p3 = &a;  // 不允许修改指针指向的内容,同时不允许指针移动。

并且,const 修饰的底层指针 只能赋给const底层指针,不能赋给非const底层指针或const顶层指针。原因很简单,因为const底层指针不允许对其指向的内容改动,假如能赋给非const底层指针,那么非const底层指针就可以对其指向的内容修改,这就违背了const底层指针的意愿。

5. 修饰参数传递

  • pass by value,这种加不加const效果是一样的,因为pass by value传递的是实参的副本,无论函数中怎么对其修改,都不会影响原实参的值:
// 对传入参数的副本加10,在赋给该副本,并没有影响实参。
void fun(int a){
	a += 10;
}

int main(){
	int age = 5;
		fun(age)
	//这里age还是等于5,加不加const效果一样,所以没必要加const
	std::cout << age << std::endl; // 5
	return 0;
}
  • pass by pointer,指针传递,表示不允许对指针指向的内容修改,实参要传入某变量的地址;
  • pass by reference,不能对引用的变量修改,可以提高参数传递的效率:void fun(const T& a);如果传入参数临时对象的构造浪费时间,这将会是一个不错的选择。

与类相关的const

1. cosnt类对象

const修饰类对象,意味着该对象只能调用const成员函数,且不能对该对象的成员变量进行任何改动。而非const类对象可调用const与非const成员函数。
note:构造函数和析构函数不能声明为const

2. const成员函数

const成员函数,const出现的位置在参数列表后,函数体前,且const关键字在声明时和定义时中都必须加上。

class Date{
private:
	int year_;
	const int month_;
	static const int num_ = 30;
public:
	Data(int year) : year_(year){} // const 成员变量可在构造函数中初始化
	int GetYear() const;
	int GetMonth() const {
		return month_
	}
};

void Data::GetYear() const {
	return year_;
}
  • const成员函数表示该函数为只读,不能对非static成员变量做任何修改,也不能调用非const成员函数。
  • 类的const成员变量可在定义时是直接赋初值,也可在构造函数的初始化列表中初始化,不可再函数体中赋值
  • static const 成员变量也可在类内直接定义,如上述的static const int num_ = 30;

总结

本文记录了const关键字几种用法与注意事项,希望能加深自己及读者记忆!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:34:21  更:2022-07-20 18:36:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 9:48:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码