Ist es möglich, STL-Klasse Objekt von void* umzuwandeln?
#include <string>
void func(void *d)
{
std::string &s = reinterpret_cast<std::string&>(d);
}
int main()
{
std::string s = "Hi";
func(reinterpret_cast<void*>(&s));
}
Ist es möglich, STL-Klasse Objekt von void* umzuwandeln?
#include <string>
void func(void *d)
{
std::string &s = reinterpret_cast<std::string&>(d);
}
int main()
{
std::string s = "Hi";
func(reinterpret_cast<void*>(&s));
}
Verwenden Sie static_cast, um void-Zeiger wieder in andere Zeiger zu konvertieren, achten Sie nur darauf, dass Sie genau denselben Typ wie ursprünglich verwenden. Für die Umwandlung in einen void-Zeiger ist kein cast erforderlich.
Dies funktioniert für jeden Zeigertyp, einschließlich Zeigern auf Typen aus der stdlib. (Technisch gesehen jeder Zeiger auf einen Objekttyp, aber das ist es, was mit "Zeigern" gemeint ist; andere Arten von Zeigern, wie z. B. Zeiger auf Datenelemente, erfordern eine Qualifizierung.)
void func(void *d) {
std::string &s = *static_cast<std::string*>(d);
// It is more common to make s a pointer too, but I kept the reference
// that you have.
}
int main() {
std::string s = "Hi";
func(&s);
return 0;
}
Ich habe wie folgt umformuliert,
#include<string>
void func(void *d)
{
std::string *x = static_cast<std::string*>(d);
/* since, d is pointer to address, it should be casted back to pointer
Note: no reinterpretation is required when casting from void* */
}
int main()
{
std::string s = "Hi";
func(&s); //implicit converssion, no cast required
}
Ja, das ist möglich, aber Sie versuchen, von einem Zeiger auf void *
, dann zu einer Referenz . Die reinterpret_cast
Operator erlaubt nur den Rückgriff auf genau denselben Typ, mit dem Sie begonnen haben. Versuchen Sie stattdessen dies:
void func(void *d)
{
std::string &s = *reinterpret_cast<std::string*>(d);
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.