
造成这个错误的一般原因是常量对象尝试调用该对象里的非常量函数,例如class Bala里有一个普通的成员函数func(),在某处声明了Bala类常量对象bala,const Bala bala,这是通过bala调用func()肯定是不行的。
class Bala
{
void func()
{
// balabala...
}
void func_2() const
{
// balabala...
}
}
int main()
{
const Bala bala;
bala.func(); // 报错!error C2662.
bala.func_2(); // 正确!
return 0;
}
常量对象
1.希望某个变量的值不被改变,在前面加上const即可成为常量对象,常量对象要在声明时初始化;
class Bala
{
public:
int val = 1;
};
int main()
{
Bala bala;
const Bala* ptr = &bala; // 常量指针。
ptr->val = 2; // 报错!试图修改常量指针指向地址的值。
return 0;
}
2.对象传递经常用到指针,如果不希望某个接口甩出去的指针被修改或者被删除,则在指针变量前面加上一个const是一个不错的选择,引用同理;
const int* GetVaules()
{
// 返回一个数组对象,不用担心这个对象被修改。
}
3.指针常量,形如 int* const val;这种类型得指针是可以修改其地址上的值,但是这个变量不能够再指向其他地址。
class Bala
{
public:
int val = 1;
};
int main()
{
Bala bala;
Bala* const ptr = &bala;
ptr->val = 2; // 正确!可以修改指向地址的内容。
Bala balabala;
ptr = &balabala; // 错误!不能指向其他地址。
return 0;
}
常量函数
声明常量函数的作用是表示这个函数不会修改该类里成员变量得值,在函数名称后面加上const即是常量函数。
class Bala
{
public:
int val = 1;
int test() const // 常量函数。
{
val = 2; // 报错!不能修改成员变量得值,无论是不是常量成员。
return val;
}
};
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)