Ist es ein undefiniertes Verhalten gegenüber const_cast eine const-Ansicht eines nicht konstanten Socket-Empfangs-Byte-PC++

Programme in C++. Entwicklerforum
Anonymous
 Ist es ein undefiniertes Verhalten gegenüber const_cast eine const-Ansicht eines nicht konstanten Socket-Empfangs-Byte-P

Post by Anonymous »

Ich habe Code, der (nicht konstete) UDP-Bytes über recv () Systemanruf empfängt. Der Byte-Puffer wird dann an Code auf Unternehmensebene weitergegeben, der die Bytes liest, indem er so etwas wie: < /p>
macht

Code: Select all

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(), ...);
Hinweis: Diese Art von neu interpret_cast befindet sich im Grunde genommen überall im Code und wird seit mehr als einem Jahrzehnt kämpft, obwohl ich weiß, dass einige Puristen Einwände erhöhen könnten. Angenommen, das Feld2 muss in einen anderen Wert geändert werden. Normalerweise besteht die richtige Art und Weise, dies zu tun, eine veränderliche Elementvariable zu verwenden. Ich kann dies aufgrund von Framework -Einschränkungen nicht tun (siehe Beispielcode unten). Ich mache dies also, indem ich BusinessMessage eine CONT Mitgliedsfunktion hinzufüge, die tatsächlich Field2 mutiert, so etwas wie folgt: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>
Ich habe dies unter UB-Sanitizer getestet, und es beschwert sich nicht. Ich bin mir nicht sicher, dass er sich irren mag, aber ich weiß auch nicht definitiv, ob ich Recht habe. < /P>
Ist das UB nach dem Standard? Wird dies mit einem modernen (z. B.> = 12) GCC -Compiler in Sicherheit sein, auch wenn es sich technisch gesehen um ub?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post