const — сделать переменную доступной только для чтения после инициализации в другой функции / конструкторе [C ++]

У меня есть класс в файле 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
...
}

Это возможно? Или мне придется использовать другое значение?

1

Решение

К сожалению, вы не можете сделать это таким образом.

Однако вы все еще можете делать то, что вы хочу сделать (вы можете изменить точный механизм в соответствии с вашими потребностями, поскольку вы не совсем ясно):

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())
{
}
2

Другие решения

Классовая инициализация членов работает в C ++ 11:

class A {
public:
A();
private:
const bool t = false;
};

До C ++ 11 вы использовали бы список инициализаторов членов:

class A {
public:
A() : t(false) {}
private:
const bool t;
};

Но const члены данных необычная вещь. С одной стороны, они делают ваш класс не присваиваемым (если вы полагаетесь на сгенерированный компилятором оператор присваивания). Просто сделайте член закрытым и не позволяйте интерфейсу предоставлять средства для его изменения.

2

По вопросам рекламы [email protected]