У меня есть класс в файле A.h:
class A {
...
public:
A();
...
private:
bool t = false;
...
}
В файле A.cpp:
A::A() {
...
t = true; <- after this point, have t be const or readonly
...
}
Это возможно? Или мне придется использовать другое значение?
К сожалению, вы не можете сделать это таким образом.
Однако вы все еще можете делать то, что вы хочу сделать (вы можете изменить точный механизм в соответствии с вашими потребностями, поскольку вы не совсем ясно):
class A {
...
public:
A();
...
private:
bool A::init_A_impl();
const bool t_;
...
};
bool A::init_A_impl()
{
bool t = false;
...
t = true; <- after this point, have t be const or readonly
...
return t;
}
A::A() : t_(init_A_impl())
{
}
Классовая инициализация членов работает в C ++ 11:
class A {
public:
A();
private:
const bool t = false;
};
До C ++ 11 вы использовали бы список инициализаторов членов:
class A {
public:
A() : t(false) {}
private:
const bool t;
};
Но const
члены данных необычная вещь. С одной стороны, они делают ваш класс не присваиваемым (если вы полагаетесь на сгенерированный компилятором оператор присваивания). Просто сделайте член закрытым и не позволяйте интерфейсу предоставлять средства для его изменения.