gibt NULL anstelle von std :: string C ++ zurück

8

Ich habe diese Funktion:

%Vor%

In dieser Funktion gebe ich NULL und den Code kompilieren (IDE: VS 2012). Für mich, NULL ist es kein std :: string-Objekt, so dass wir das nicht schreiben können.

Also warum ist es richtig, NULL zurückzugeben, wenn die Rückgabe der Funktion ein std :: string ist?

    
Bob 07.11.2013, 20:25
quelle

2 Antworten

6

Der Wert NULL ist äquivalent zu 0 in C ++ und 0 ist eine absolut gültige char const* Konstante. Die String-Klasse hat einen explicit -Konstruktor, der char const* übernimmt, d. H. Der Compiler kompiliert den Code, aber es funktioniert nicht: Das heißt, obwohl der Compiler den Code ausschließt, ist das Verhalten nicht definiert.

Wenn ich die Definition in C ++ 11 betrachte, sehe ich keine delete d Überladung, die ein std::nullptr_t übernimmt, d. h. sie wird auch kompiliert, wenn von nullptr konvertiert wird. Ich hätte gehofft, dass es eine delete d Überladung geben würde, die ein std::nullptr_t übernimmt, was es dem Compiler ermöglichen würde, die Situation zumindest zu erfassen, wenn nullptr übergeben wird.

    
Dietmar Kühl 07.11.2013, 20:30
quelle
4

Sie erstellen eine std::string von char const* gleich 0 (oder NULL ).

Dies ist durch den Standard eigentlich verboten:

  

[C++11: 21.4.2/9] Erfordert: s darf kein Nullzeiger sein

Allerdings ist GCC für Sie besonders nett und tut es überprüft, um es zu einem No-Op zu machen . Es ist nicht erforderlich, und Sie sollten sich niemals darauf verlassen.

    
quelle

Tags und Links