成员函数const(c++中关于const的问题)

本文目录
c++中关于const的问题
使用const限定的成员函数不能改变类的成员变量的值,主要是为了保护成员变量不在该函数中被更改。
例如,有一个成员变量int
a,获得成员变量a的函数
int
void
get_a()const;
这里const表示get_a这个函数不能够更改类的成员变量的值,但是可以使用,所以这时如果get_a的实现是:
int
void
get_a()
{
return
a;
}
这样就不会出错,而如果是:
int
void
get_a()
{
a=1;
return
a;
}
这样就会报错,因为函数改变了成员变量的值。
const限定函数的作用是在大型工程中保证封装性,不能随意暴露成员变量,成员变量的更改必须保证在特定函数,使用特定方法,只有这样,才能保证软件的安全性。
const类型的成员函数内部如何改变成员变量
通过指针也能实现。在C++中,由const修饰的成员函数的函数体内部,是不能够对成员变量进行修改的。这个特性被用来保证某些成员函数在实现过程中,避免由于程序员大意而对数据进行了错误的修改;同时也说明此成员函数是非修改性的。如只需要返回成员变量的成员函数就被声明为const类型(const的位置在函数定义参数列表之后)推广开来,在const成员函数中也不能够调用非const的成员函数。这是因为非const成员函数可能会改变成员变量的值,这与const成员函数的定义相违背。但是在某些情况下,需要在const函数中改变成员变量。这就需要把成员变量设置成mutable类型。如class C{public:void func(const int& p) const{i = p;}private:mutable int i;};如果变量i不声明为mutable类型,则编译不会通过。如果成员变量是一个类类型或者结构类型,而在const函数中调用这些变量的成员函数,除了用mutable声明外,还可以用一种变通的方法:class D{public:void op(){}}class C{public:void func(const int& p, D& d) const{i = p;d.op();}private:mutable int i;D cd;};然后在调用时,参数D& d以*this作为输入,也可以达到调用非const函数的作用。P.S 最近阅读相关的文章,又学到了一种方法,能够使得在const成员函数中调用非const成员函数。就是使用const_cast《运算符。它能够使得const去掉const的属性,使得violate属性去掉violate属性。上面的例子就可以写成。

更多文章:
idea控制台乱码(idea 输出 System.out.println() 控制台乱码)
2026年10月14日 07:30
spring事务的作用(为什么要使用spring的事务,一般在什么情况下使用)
2026年10月14日 05:40
linux怎么进入命令行(怎么样配置linux使其启动时直接登录到命令行模式)
2026年10月14日 02:00
java培训机构好还是大学好(大学生想转行学java,该去java培训班还是自学呢)
2026年10月13日 23:30
前端面试必背十个点(资深HR揭秘:Web前端面试技巧有哪些)
2026年10月13日 17:50
sqlplus重置用户名密码(Oracle中的plus的用户名和密码忘了怎么办)
2026年10月13日 17:40



