有没有办法做到这一点:
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方法?
答案 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