7
votes

Pourquoi je peux utiliser Const Char * comme clé dans STD :: Map

J'ai défini une structure de données

a["abc"] = 1;


4 commentaires

Faire des trucs comme ça sonne implicitement comme une recette pour trouver des bugs difficiles à trouver.


Nah, certaines conversions implicites vont bien. Une c-string et std :: string sont sémantiquement équivalents, c'est juste qu'une chaîne C est un morceau de merde inutile.


@Warren, il est courant en C ++, en particulier pour les constructions couramment utilisées comme STD :: String. Vous pouvez profiter du succès de la performance de la construction temporaire STD :: String Cordon à chaque fois que vous faites une recherche si ...


Encore un autre argument de pente glissante C ++. Je suppose que je suis toujours contrecœur de la dernière fois que ça m'a mordant.


4 Réponses :


16
votes

std :: string a un constructeur qui permet la conversion implicite de const char * . xxx

signifie qu'une conversion implicite telle que xxx < p> est autorisé.

C'est l'équivalent de faire quelque chose comme xxx

si vous souhaitez interdire la construction de conversion implicite, vous marquez le constructeur comme explicite : xxx


0 commentaires

4
votes

Il y a un constructeur pour STD :: String qui prend Cons-Char * en tant que paramètre. XXX

Sauf indication contraire du constructeur, le compilateur appliquera une conversion définie si nécessaire pour Appelez n'importe quelle fonction.


0 commentaires

3
votes

Voir constructeur de chaîne . Le constructeur fournit la conversion de la clé de votre carte. C'est équivalent à xxx


0 commentaires

2
votes

en C ++ si vous créez un constructeur de classe qui ne prend qu'un paramètre, alors (sauf si vous le dites autrement avec explicite ), ce type de paramètre sera implicitement convertible à votre classe.

std :: string a un tel constructeur pour char *

Oui, cela peut causer un comportement inattendu à l'occasion. C'est pourquoi vous devez généralement mettre explicite sur les constructeurs à paramètres unique, sauf si vous voulez vraiment ces conversions silencieuses.


0 commentaires