Есть много вопросов о C ++ эквиваленте readonly
в C # упоминание const
, Тем не менее, до сих пор я не нашел ничего, что, насколько я могу судить, на самом деле правильно или даже упоминает подробности, которые мне нужны здесь.
Поля только для чтения могут быть установлены (даже несколько раз) внутри ctor (спекуляция). Это позволяет выполнять различные операции, прежде чем окончательно определиться со значением. Const в C ++, с другой стороны, ведет себя немного по-разному (как в C ++, так и в C #), так как требует, чтобы конечное значение было доступно до запуска ctor.
Есть ли способ по-прежнему достичь поведения readonly
в С ++?
На самом деле, нет.
Что вы можете сделать, так это защитить поле, так чтобы оно было доступно (по крайней мере извне) получателю, и вы можете создать для него установщик, который позволяет вызывать себя только один раз.
Иначе, const
это ваша лучшая ставка.
Да использовать const
— значение не должно быть известно во время компиляции:
struct X
{
const int a;
X(int y) : a(y) {}
};
//...
int z;
cin >> z;
X x(z); //z not known at compile time
//x.a is z
Другой альтернативой является использование пользовательской структуры, которая позволяет устанавливать только один раз, но это излишне (и вы, вероятно, не могли бы применить это во время компиляции в любом случае).