const用法之常类型

本文介绍了C++中const修饰符的用法。const用于修饰不变的量,比#define更安全。详细阐述了常引用、常对象、常数据成员(包括常数据成员初始化和常成员函数)的概念和使用方法,说明了常成员函数对数据成员的访问规则及对常对象的保护机制。

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

前言

const是一个修饰符。用来修饰不变的量。
其作用与#define相似,但是它更安全。
关于常量指针和指针常量可以点击这里
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象成员的值在程序运行期间不可改变

常引用

如果在说明引用时用const修饰,则被说明的引用为常引用。如果常引用坐形参,便不会产生实参的不希望的更改。用法如下:
const 类型 & 引用名
例如:

int a=5;
const int &b=a;

其中b是一个常引用,它所引用的对象不允许被改变,如果出现让b=2,则会出错。如果一个函数使用常引用则在函数执行期间不允许改变其引用的对象。

常对象

如果在说明对象时用const修饰,则被说明的对象为常对象。常对象的数据成员在对象的整个生存期间不能发生改变。其用法如下:
类名 const 对象名 [ (参数表) ];
或者
const 类名 对象名 [ (参数表) ];

#include<iostream>
using namespace std;
class node{
	public:
		int x;
};
int main(){
	node N;
	N.x=10; //N为普通对象,可以修改其数据成员
	const node M;
	M.x=10;//此时会报错,因为M为常对象,其数据成员不能被直接或间接的改变
	return 0;
}
常数据成员
1. 常数据成员

类的数据成员可以是常量或常引用,使用 const 说明的数据成员称为常数据成员。如果在一个类中说明了常数据成员,构造函数就只能通过成员初始化列表对该数据成员进行初始化,而其他任何函数都不能对该成员赋值

#include<iostream>
using namespace std;
class node{
	private:
		 const int x;
		 const int y;
	public:
		node(int a,int b);
};
node::node(int a,int b):x(a),y(b){
	//在构造函数体内初始化是非法的
	cout << x <<' '<< y;
}
int main(){
	node N;
	return 0;
}
2. 常成员函数

在类中使用关键字 const 说明的成员函数为常成员函数,格式如下:
类型说明符 函数名 (参数表) const
const 是函数类型的一个组成部分,因此在声明函数和定义函数时都要有关键字 const。在调用时不必加 const。

#include<iostream>
using namespace std;
class node{
	private:
		 int x;
		 int y;
	public:
		node(int a,int b);
		void show();
		void show()const;
};
node::node(int a,int b):x(a),y(b){}
//定义普通成员函数
void node::show(){
	cout << x << ' ' << y << endl;
}
//定义常成员函数
void node::show()const{
	cout << x << ' ' << y << endl;
}
int main(){
	node N(5,10);	//定义普通对象
	N.show();	//调用普通成员函数show()
	node const M;	//定义常对象
	M.show();	//调用常成员函数show()
	return 0;
}

说明:

  1. 常成员函数可以访问常数据成员,也可以访问普通数据成员。常数据成员可以被常成员访问,也可以被普通成员函数访问。
数据成员普通成员函数常成员函数
普通数据成员可以访问,也可以改变值可以访问,但不可改变值
常数据成员可以访问,但不可以改变值可以访问,但不可改变值
常对象的数据成员不允许访问和改变值可以访问,但不可改变值
  1. 如果将一个对象说明为常对象,则通过该对象只能调用它的常成员函数,而不能调用普通的成员函数。常成员函数是常对象唯一的对外接口,这是c++从语法机制上对常对象的保护。
  2. 常成员函数不能更新对象的数据成员,也不能调用该类中的普通成员函数,这就保证了在常成员函数中绝对不会更新数据成员的值。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值