const函数参数、成员函数限制

本文解析了const关键字在C++中的作用,强调了const函数参数和const成员函数的使用限制,以及为何编译时会报错。重点讨论了const对象调用非const函数的禁止以及const成员函数的调用规则。

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

总结: const修饰的变量、函数,都不能修改其所在对象相关的内容,包括其成员变量中的内容

1、const函数参数:

class Base 
{  
public:      
	void test() { std::cout<< " test in base\n"; }  
};  
void MyTest(const Base& b) 
{     
	b.test();  // 这里编译报错,const对象调用非const成员函数。  
}    

原因: const对象,只能访问该对象的const函数,因为调用其他函数有可能会修改该对象的成员。

编译报错:
error: passing “const Base” as “this” argument of “void Base::test()” discards qualifiers [-fpermissive]。
错误:将参数"const Base"当作参数"this",传递给 "void Base::test()"函数,做为其隐式参数丢弃限定符(const)

参考资料:
1、gcc编译报 “discards qualifiers [-fpermissive]”

2、成员函数:

class B 
{ 
public:     
	void func2() { cout << "func2" <<endl; } 
};  
class A
{  
public:     
	void func1() const { b.func2(); };  //编译错误,const成员函数调用成员变量的非const函数      
	void func2() const { cout << val2 <<endl; };  // 正确,const成员函数调用非const成员变量但不修改值     
	int val2 = 2;     
	B b; 
};  

原因:const成员函数内可以引用const数据成员,也可以引用非const数据成员,但不能修改非const数据成员的值。但不能调用非const成员函数,也不能调用非const成员变量中的非const成员函数(const到底)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值