C++基本概念总结——const 和 非const

const成员函数

类的成员函数后边增加一个 const 关键字,表示该函数为 const 成员函数。考虑如下类A的定义,f1为 const 成员函数,f2为 非const 成员函数:

class A{
public:
	A(int i) : m_id(i) {}
	void f1() const; // const 成员函数
	void f2();       // 非const 成员函数 
private:
	int m_id;
};

在 const 成员函数中不能修改类的成员变量,如下代码会导致编译失败:

void A::f1() const
{
	m_id = 1; // 编译失败!不能修改类的成员变量
}

此外,类的 const 对象,只能访问其 const 成员函数,如下代码中只有对 f2 的调用会导致编译失败:

	const A a(1);
	a.f1(); // 编译成功
	a.f2(); // 编译失败,不能访问非 const 成员函数

 

const成员变量

非静态 const 成员变量需要通过初始化列表进行初始化。静态 const 成员变量通过显示的定义进行初始化。

class A{
public:
	A(int i) : m_id(i){}  // 非静态 const 成员变量通过初始化列表初始化

private:
	const int m_id;
	static const int s_id;
};

const int A::s_id = 1; // 静态 const 变量通过显示的定义进行初始化


const指针

const指针定义时,根据 const 关键字和 * 的位置,可以分成两种情况。

	char buf[4] = "abc";
	const char* p1 = buf;
	char const* p2 = buf;
	char* const p3 = buf;

例如上面的代码中,p1和p2表示的含义相同(const 关键字在 * 的左边),表示指针指向的内容是 const 的,但指针本身是 非const。p3 (const 关键字在 * 的右边)表示指针本身是const的,但其指向的内容是 非const。

	char c = 'd';
	
	p1[0] = c; // 编译失败,其指向的内容是const的,不能修改
	p2[0] = c; // 编译失败
	p1 = &c;  // 编译成功
	p2 = &c;  // 编译成功

	p3[0] = c; // 编译成功
	p3 = &c;  // 编译失败,指针本身是const的,不能修改
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值