С учетом следующего кода:
class foo;
foo* instance = NULL;
class foo
{
public:
explicit foo(int j)
: i(j)
{
instance = this;
}
void inc()
{
++i;
}
private:
int i;
};
Использует ли следующее определенное поведение?
const foo f(0);
int main()
{
instance->inc();
}
Я спрашиваю, потому что я использую реестр классов, и поскольку я не изменяю напрямую f
, было бы неплохо сделать его const
, но позже f
будет изменен косвенно реестр.
РЕДАКТИРОВАТЬ: Под определенным поведением я подразумеваю: Помещен ли объект в какое-то специальное место в памяти, которое может быть записано только один раз? О доступной только для чтения памяти не может быть и речи, по крайней мере, до constexpr C ++ 1x. Например, константные примитивные типы (часто) помещаются в постоянную память, и выполнение const_cast
для нее может привести к неопределенному поведению, например:
int main()
{
const int i = 42;
const_cast<int&>(i) = 0; // UB
}