关于类中const 数组成员初始化的问题
在一个类中定义了一个私有的常数组 也就是说这个数组里面的东西 不能被改变
而且 要在构造这个类的时候就把这个数组给赋值了 怎么处理
我试了几种方法 都失败了 求教各位大牛。
程序代码:
const int b[3] = {1, 2, 3};
class A
{
public:
A();
private:
const int a[3];
};
A::A(int b[3])
{
for (int i = 0; i < 3; i++)
a[i] = b[i];
}
---这样不行
程序代码:
class A
{
public:
A();
private:
const int a[3] = {1, 2, 3};
};
直接赋值也不行
[解决办法]
使用cpp中的mutable.
突破const:
const固然是个好东东,但是有的时候可能不爽const的限制,比如某些时候我要修改const的值怎么办呢?此时可以使用const_cast来帮忙了。请注意,const_cast是运算符(关键字)而不是函数,比如要去掉const属性,可以:
const int a=3;
int b=(const_cast)<int>(a);
如果要去掉函数的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;
};
[解决办法]
static const int a[] = { 1, 2, 3 };
[解决办法]
常量 再类定义的时候,在自定义构造函数里进行初始化啊,系统不再提供构造函数了
[解决办法]
请参考:
特殊数据类型成员变量的初始化
[解决办法]
C++98/03的缺陷。
用C++11的brace-or-equal-initializer。
[解决办法]
C++ 11好像支持类似下面这样的写法:
{private: const int ci[3];public: BClass():ci({1, 2, 3}) { }};
[解决办法]