由于i是const类型,所以无法直接赋值。但是可以通过另外一种初始化方式进行赋值,如下图所示:
class MyClass
{
public:
MyClass();
~MyClass();
private:
const int i;
};
MyClass::MyClass():i(0)
{
}
MyClass::~MyClass()
{
}
那么,对于类中const类型的数组的初始化:
{
private:
const int ci[3];
public:
BClass():ci({1, 2, 3})
{
}
};
另外也可以变为静态变量
class BClass
{
private:
static const int ci[3]; // 在前面加上static
public:
void print_info()
{
for(int i = 0; i < 3; ++i)
{
cout << ci[i] << endl;
}
}
};
const int BClass::ci[3] = {1, 2, 3}; // 在这里初始化
或者转变为容器
int a[3] = {1, 2, 3};
class BClass
{
private:
const vector<int> v; // 用vector来代替数组
public:
BClass():v(a, a + 3) // 初始化列表初始化
{
}
void print_info()
{
for(int i = 0; i < 3; ++i)
{
cout << v[i] << endl;
}
}
};
突破const属性:
可以使用const_cast来去除被赋值变量的const属性。const_cast是运算符(关键字)而不是函数,例如:
const int a=3;
int b=(const_cast)<int>(a);
变量b不再具有const属性。
如果要去掉函数的const属性 可以声明关键字mutable,它允许const函数体内修改被mutable声明的变量的值,下面是一个MSDN里面的例子:
// mutable.cpp
class X
{
public:
bool GetFlag() const
{
m_accessCount++;
return m_flag;
}
private:
bool m_flag;
mutable int m_accessCount;
};