Kommentare sind über boost::asio bestreut, die sagen:Wie kann boost :: asio :: buffer_cast die Typ-Sicherheit verletzen?
Die boost :: asio :: buffer_cast Funktion Verletzungen vom Typ Sicherheit erlaubt, so Verwendungen es in Anwendungscode sollte sorgfältig in Betracht gezogen werden.
jedoch letztlich, was die Puffer Schnittstelle läuft darauf hinaus, ist dies:
struct buffer {
void *data;
friend void* cast_helper(const buffer& b);
};
void* cast_helper(const buffer& b) {
return b.data;
}
template <typename to_t>
to_t buffer_cast(const buffer& b) {
return static_cast<to_t>(cast_helper(b));
}
static_cast
ein void*
zu einem Zeigertyp ist gut definiert und als die entsprechende Sache für void*
Daten zu tun (siehe " Sollte ich "static_cast" oder "reinterpret_cast" verwenden, wenn ich eine void * auf irgendwas "lege"). Was bedeutet es also, wenn man die Typsicherheit verletzt?