使变量只读,但C ++中的客户端仍然可以访问它?

时间:2015-07-21 19:40:02

标签: c++

有没有办法做到这一点:

class example {
public:
   const int dontModifyMe;

   example() {
      // setup for dontModifyMe..
      dontModifyMe = getValueForDontModifyMe(earlierSetup);
   }
}

example ex;
cout << ex.dontModifyMe; // works
ex.dontModifyMe = 4 // error

如果dontModifyMe不需要设置,我只会使用成员初始化列表。有没有办法不需要显式的getter / setter方法?

2 个答案:

答案 0 :(得分:9)

我过去使用过的东西是:

class example {
    int m_theValue;
public:
    const int &theValue = m_theValue; 
}

这允许您通过m_theValue在内部编辑值,同时保持“公共”领域中的常量接口可用。它类似于getter / setter方法,但不需要实际使用所述方法。

答案 1 :(得分:2)

示例(使用gcc版本4.8.4(Ubuntu 4.8.4-2ubuntu1~14.04)编译)

using namespace std;

int initializer( int c )
{
    return 4 * c;
}

class A
{
public:
    A() : v( initializer( 5 ) ) {}
    const int v;
};

int main(int argc, char *argv[])
{
    A a;
    cout << "Result " << a.v << endl;

    return 0;
}

结果

Result 20