Код: Выделить всё
const auto* msg = reinterpret_cast(buffer); // BusinessMessage is a packed struct corresponding exactly to the bytes sent by the sender
... through some framework code so I'm forced to keep the msg as const...
DoBusinessLogic(msg->GetField1(), msg->GetField2(), ...);
struct BusinessMessage : Field1, Field2, ... // sadly, I cannot change this impl so as to allow mutable member variables.
{
void NonConstSetField2(int value) const
{
const Field2* field = static_cast(this);
Field2* mutableField = const_cast(field);
mutableField->Set(value);
}
};
< /code>
Я проверил это под UB-санитизатором, и он не жалуется. < /p>
Коллега говорит, что это UB. Я не уверен, он может ошибаться, но я не знаю окончательно, если я прав. Это UB в соответствии со стандартом? Будет ли это безопасно с современным (например,> = 12) компилятором GCC, даже если он технически UB?
Подробнее здесь: https://stackoverflow.com/questions/796 ... cket-recei
Мобильная версия