J'ai défini une structure de données
a["abc"] = 1;
4 Réponses :
signifie qu'une conversion implicite telle que p> C'est l'équivalent de faire quelque chose comme p> si vous souhaitez interdire la construction de conversion implicite, vous marquez le constructeur comme std :: string code> a un constructeur qui permet la conversion implicite de
const char * code>
. explicite code>: p>
Il y a un constructeur pour STD :: String qui prend Cons-Char * en tant que paramètre. Sauf indication contraire du constructeur, le compilateur appliquera une conversion définie si nécessaire pour Appelez n'importe quelle fonction. P> p>
Voir constructeur de chaîne . Le constructeur fournit la conversion de la clé de votre carte. C'est équivalent à
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 Oui, cela peut causer un comportement inattendu à l'occasion. C'est pourquoi vous devez généralement mettre explicite code>), ce type de paramètre sera implicitement convertible à votre classe. p>
std :: string code> a un tel constructeur pour
char * code> p>
explicite code> sur les constructeurs à paramètres unique, sauf si vous voulez vraiment ces conversions silencieuses. P>
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 code> 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.