Warum kann ich const char * als Schlüssel in std :: mappstd :: string, int verwenden

7

Ich habe eine Datenstruktur definiert

%Vor%

Ich habe festgestellt, dass ich const char * als Schlüssel übergeben kann, wie folgt:

%Vor%

Welche Funktion bietet eine automatische Typkonvertierung von const char * nach std :: string?

    
zhanxw 05.12.2012, 14:52
quelle

4 Antworten

15

std::string hat einen -Konstruktor, der die implizite Konvertierung von const char* . %Vor%

bedeutet eine implizite Umwandlung wie

%Vor%

ist erlaubt.

Es ist das Äquivalent, etwas wie

zu tun %Vor%

Wenn Sie die Konstruktion der impliziten Konvertierung nicht zulassen wollten, markieren Sie den Konstruktor als explicit :

%Vor%     
juanchopanza 05.12.2012, 14:54
quelle
4

Es gibt einen Konstruktor für std :: string, der const char * als Parameter akzeptiert.

%Vor%

Wenn der Konstruktor nicht explizit deklariert wird, wendet der Compiler eine benutzerdefinierte Konvertierung an, falls eine Funktion aufgerufen werden muss.

    
jcoder 05.12.2012 14:55
quelle
3

Siehe Zeichenkettenkonstruktor . Der Konstruktor stellt die Konvertierung für den Schlüssel in Ihrer Map bereit. Es ist äquivalent zu

%Vor%     
Olaf Dietsche 05.12.2012 14:56
quelle
2

Wenn Sie in C ++ einen Klassenkonstruktor erstellen, der nur einen Parameter akzeptiert, dann (wenn Sie es nicht mit explicit anders angeben), wird der Typ dieses Parameters implizit konvertierbar in Ihre Klasse.

std::string hat einen solchen Konstruktor für char *

Ja, dies kann gelegentlich zu unerwartetem Verhalten führen. Aus diesem Grund sollten Sie explicit normalerweise für Konstruktoren mit einem einzigen Parameter verwenden, es sei denn, Sie möchten diese stillen Konvertierungen wirklich.

    
T.E.D. 05.12.2012 14:59
quelle

Tags und Links