Das Zeigerliteral ist das Schlüsselwort nullptr. Es ist ein Prvalue vom Typ std :: nullptr_t.
Der Typ nullptr_t sollte in T*
konvertierbar sein, aber der Compiler hat keine operator <<
für nullptr_t
und weiß nicht, in welchen Typ nullptr
konvertiert werden soll.
Sie können dies verwenden
%Vor% Dies liegt daran, dass nullptr
vom Typ std::nullptr_t
ist, das die entsprechenden Operatoren für std::cout
nicht definiert, um Objekte dieses Typs drucken zu können. Sie können den Operator selbst folgendermaßen definieren:
Nachdem diese Funktion definiert wurde, wird sie verwendet, um alle Versuche, nullptr
über ostream
zu drucken, zu verarbeiten. Auf diese Weise müssen Sie nullptr
nicht jedes Mal drucken, wenn Sie es drucken.
Ich stieß auf dieses Problem, während ich einen typisierten Testcode schrieb (mit Hilfe von Vorlagen). Ich musste einen Wert vom Typ T
drucken, wobei nullptr_t
ein gültiger Typ für T
war. Ich habe eine Lösung gefunden, bei der der zu druckende Wert in eine Template-Funktion printable
eingebunden wurde. Diese Funktion verwendet dann die Template-Spezialisierung, um das gewünschte Verhalten zu liefern, wenn ein nullptr_t
verwendet wird.