Der Wert von nullptr kann nicht auf dem Bildschirm ausgegeben werden

8

Ich habe über nullptr gelesen und trainiere auf g ++ und auch auf VS2010.

Als ich es tat

%Vor%

druckt den Wert von nullptr auf dem Bildschirm, g ++ und VS geben Compilerfehler. Ist es nicht erlaubt, den Wert von nullptr auf dem Bildschirm zu drucken?

    
StackIT 14.02.2014, 06:55
quelle

3 Antworten

8

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%     
ForEveR 14.02.2014, 06:58
quelle
3

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:

%Vor%

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.

    
ApproachingDarknessFish 14.02.2014 07:10
quelle
1

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.

%Vor%

Ideone-Link

    
Emile Cormier 06.12.2014 03:23
quelle

Tags und Links