由于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; };