类中const类型变量初始化

    xiaoxiao2021-03-25  141

    由于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; };
    转载请注明原文地址: https://ju.6miu.com/read-3244.html

    最新回复(0)