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简解——const的各种位置记录说明 -> 正文阅读

[数据结构与算法]C/C++ const简解——const的各种位置记录说明

序言

相信很多人总是容易忘记const放哪个位置是什么意思,我也是,所以特地记录下const关键字的用法。
.

const int variate 与 int const variate

修饰int,表示variate不可修改,普通变量需要直接初始化。

const int variate int const variate 是一样的,都是const修饰int。

const int variate = 5;

如果是非静态的类成员变量,可通过构造函数初始化

class test
{
public:
	test():variate (5)
	{}

	const int variate;
}

.

static const int variate 与 static int const variate

修饰int,表示variate不可修改,与静态普通变量一样需要直接初始化。

static const int variate static int const variate 是一样的,都是const修饰int。

static const int variate = 5;

如果是静态的类成员变量,需在类外进行初始化

class test
{
public:
	static const int variate;
}

const int test::variate = 5;

.

const int * pointer与int const * pointer

修饰int,修饰指向的内容,使指向的内容不可修改,
但该改变指向的内存空间,相当于只读属性的指针。

const int * pointerint const * pointer是一样的,都是const修饰int。

*pointer不可改,pointer可改

例子:
int a = 5;
int b = 6;
const int * pointer = &a;
*pointer = 7;	//Error
pointer = &b;	//OK

通俗来说,就是这个指针指向的,不能改变值,是只读的,但是指向可以指向另一个值的地址。

.

int * const pointer

修饰*,修饰指向的地址,使指向的地址不可修改,
但该改变指向的值,相当于引用。

*pointer可改,pointer不可改

例子:
int a = 5;
int b = 6;
int * const pointer = &a;
*pointer = 7;	//OK
pointer = &b;	//Error

通俗来说,就是这个指针指向的,不能改变地址,但是改变它的值。
.
.

int const function()与const int function()

int const &function()与const int &function()

修饰int的返回值,按理说是想表明返回值不可修改,即返回的值都不准改变,如果是和返回值一致的变量来赋值的话,确实可以。

但是这更多像是无病呻吟,因为如果我将返回值赋值到一个int类型的一样可以,这是因为隐式转换的结果。

const int function()
{
	...
}

int main()
{
	const int variateA = function();	//OK
	int variateB = function();			//OK
	variateA = 4;		//Error
	variateB = 4;		//OK
	return 0;
}

.

const int * function()与int const * function()

其实与指针的const int * pointerint const * pointer差不多,具体可看上面的解释。

这个返回值必须使用相同类型进行赋值。

修饰返回值指针所指向的值,使其不可更改,但是这个指针可以随时指向其它的地址。

const int * function()
{
	...
}

int main()
{
	const int * pointerA = function();		//OK
	int * pointerB = function();			//Error
	return 0;
}

.

int * const function()

其实与int * const pointer的差不多,具体可看上面的解释。

这个返回值必须使用相同类型进行赋值。

修饰返回值指针所指向的地址,使其不可更改,但是这个指针的值可以任意更改。
.

void function( const 参数 )

参数的与上文所述普通的变量,引用,指针的const用法一致,看上文对应的作为参数即可。
.

void function() const

放在函数后面的const是修饰函数,而实际是修饰传进来的this指针。

在函数后面放const只能修饰非静态的成员函数,静态及普通函数都会编译错误。

因为这个const根本就不是修饰函数,你可以认为这是修饰传进来的this指针的类型,其作用就是表明,这个函数里,任何修改成员变量的代码都是无法编译通过的。

class test
{
public:
	void function() const
	{
		int a;
		variate = 3;	//Error
		a = 4;			//OK
	}
	
	int variate;
}

如果有任何错误的地方或者漏的地方,欢迎留下评论或者私聊跟我说,若真是错的我立即改正,漏的我立即补充。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:42:57  更:2022-04-09 18:44:41 
 
开发: 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年11日历 -2024/11/26 10:04:20-

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