Warum nochmal nullptr?
-
Ich steh gerade voll auf dem Schlauch. Warum ist nullptr nicht nochmal einfach sowas hier?
struct nullptr_t { template <typename T> operator T* () { return 0; } } nullptr;
-
Weil es dann nur verfügbar wäre, wenn du die entsprechenden Header einbindest.
Ausserdem sollen so die Fehlermeldungen aussagekräftiger werden können.Es gibt aber ein
std::nullptr_t, der ist allerdings aus dem Schlüsselwortnullptrabgeleitet und nicht umgekehrt.
-
Schau dir mal die Semantik von reinterpret_cast<XYZ>(nullptr) an, da wird dir klar, dass das nicht so einfach geht

-
Also gut.
struct nullptr_t { template <typename T> operator T* () const { return 0; } void const* const __ptr = 0; } const nullptr;Und jetzt?

-
schlaucherl schrieb:
Weil es dann nur verfügbar wäre, wenn du die entsprechenden Header einbindest.
Ausserdem sollen so die Fehlermeldungen aussagekräftiger werden können.Es gibt aber ein
std::nullptr_t, der ist allerdings aus dem Schlüsselwortnullptrabgeleitet und nicht umgekehrt.new muss auch nicht eingebunden werden, kann aber.
-
Ethon schrieb:
schlaucherl schrieb:
Weil es dann nur verfügbar wäre, wenn du die entsprechenden Header einbindest.
Ausserdem sollen so die Fehlermeldungen aussagekräftiger werden können.Es gibt aber ein
std::nullptr_t, der ist allerdings aus dem Schlüsselwortnullptrabgeleitet und nicht umgekehrt.new muss auch nicht eingebunden werden, kann aber.
Du meinst den Operator - den globalen. Jaja.
Andererseits könnte man ein equivalent hinkriegen,
werd gleich mal einen Hack mit Haufenweise undefiniertem Verhalten basteln 
-
@Kellerautomat
Ich vermute mal wegen Overload-Resolution? nullptr sollte immer direkt für Zeiger passen, mit der nullptr_struct gäbe es eine userdefinierte Konvertierung, und wenn ich mich recht erinnere wird das als schlechter gewertet also ohne Konvertierung.Und als Non-Type Template Argument funktioniert deine nullptr struct auch net, der echte nullptr sollte dagegen mMn. gehen.
-
Ah richtig, das stimmt natürlich. Darauf bin ich jetzt auf die Schnelle nicht gekommen.
