Смотрите следующее:Разве разыменовывает указатель из const_cast ALWAYS вызывает неопределенное поведение?
struct A
{
std::string* get() const
{
//return const_cast<std::string*>(&m_pObj);
return &const_cast<A*>(this)->m_pObj;
}
std::string m_pObj;
};
ли разыменования const_cast
из this
UB? Есть ли время разыгрывать результат от const_cast
до констатации указателя далеко не invoke UB?
(я знаю, что в приведенном выше примере это плохая практика, плохой дизайн, и может быть решена с изменяемым - это не точка)
Пока разыменование не используется для * изменения * объекта, нет UB. Это: 'A const a; std :: cout << * a.get(); 'отлично, но' a.get() -> clear(); 'is not. –
@ Давид да; см. обновление. О, и я предпочитаю ваш пример ('-> clear()') для моего (разыменовать + изменить '[0]'), поэтому я украл его, надеюсь, вы не против. –
Нет проблем :) +1 –