Im C++ 11-Standard verstehe ich nicht den Grund, warum die Adresse von nullptr nicht erlaubt ist, während eine erlaubt, die Adresse ihrer eigenen std :: nullptr_t-Instanzen zu nehmen. Abgesehen von der Tatsache, dass nullptr ein reserviertes Schlüsselwort ist, gibt es eine bestimmte Begründung für diese Entscheidung?Warum kannst du nicht die Adresse von nullptr nehmen?
Ganz einfach, weil es mir Spaß macht, habe ich versucht, diese Einschränkung mit der folgenden Funktion zu umrunden:
decltype(nullptr)* func(const decltype(nullptr) &nref) noexcept
{
return const_cast<decltype(nullptr)*>(reinterpret_cast<const decltype(nullptr)*>(&nref));
}
ich denn ohne sie reinterpret_cast auf den Parameter zu verwenden, hatte ich war immer die hysterischen Fehler:
error: invalid conversion from 'std::nullptr_t*' to 'std::nullptr_t*' [-fpermissive]
Wenn ich diese Funktion durch die Übergabe nullptr direkt aufrufen, bekomme ich jedes Mal eine andere Adresse. Wird nullptr dynamisch eine Adresse just-in-time für Vergleiche zugewiesen? Oder (wahrscheinlich wahrscheinlicher) ist vielleicht der Compiler erzwingt eine temporäre Kopie des zugrunde liegenden Objekts?
Natürlich ist nichts davon wichtige Information, ich finde es nur interessant, warum diese bestimmte Einschränkung implementiert wurde (und warum ich das Verhalten sehe, das ich bin).
'nullptr' ist ein Prvalue. Sie können die Adresse von denen nicht nehmen. +1 für die Fehlermeldung, obwohl. – chris