Я всегда использую const
для защиты значений, которые не должны быть назначены. Во всяком случае, есть некоторые случаи, когда мне может понадобиться инициализировать переменную, а затем использовать ее как значение const
в той же функции. Например:Есть ли лучший способ превратить переменную в «const» после присвоений?
void foo() {
int flags;
/* ... */
if (condition1)
flags |= 1;
/* .... */
if (conditionX)
flags |= Y;
/* .... */
// start using flags as a const value
const flags; // <<= I want something like this.
const int c_flags = flags; // <<= What I have to do. The naming is annoying.
/* ... */
}
Есть ли способ улучшить это? Могут быть стили кодирования или расширенные языковые функции.
От @Potatoswatter: для C в GCC/лязгом (гну стиль, скажем, -std = gnu11), заявление может быть использовано выражение.
foo() {
const int flags = ({
int f = 0;
if (X) f |= Y;
/* ... update f ... */
f;
});
/* use the `const` flags */
}
Вы можете использовать 'const_cast'. – Shravan40
@ Shravan40 Используйте 'static_cast' для добавления' const'. Используйте 'const_cast' только для * remove *, потому что это красный флаг. – Potatoswatter
Вы должны пометить C или C++, не оба, некоторые ответы здесь не могут быть применены к C. – Holt