J'ai une question sur la concaténation des chaînes en C ++.
ed before SaveGraphicsState abc
8 Réponses :
string str = string("ab") + "c";
Ou: string str2 = str1; str2 + = ch; code>
-1 "AB" + 'c' code> est pas i> équivalent à
"AB" ['C'] code>. Le premier est un pointeur, ce dernier est un char.
@ROB: Merci. Corrigée.
Votre pensée concernant la première ligne est correcte, c'est précisément ce qui se passe. P>
Il n'y a pas d'opérateur Si vous souhaitez créer la chaîne en une seule photo, vous pouvez aider le compilateur à déterminer que vous vouliez convertir en chaîne code> d'abord avec une distribution: Dans le second cas, vous avez déjà créé une chaîne code> (code> et + code> par défaut pour les chaînes littéraires telles que
"AB" code> donc ce qui se passe est le compilateur prend cette (comme une chaîne de style C) et utilise Le pointeur
COR * code> qui pointe vers le littéral. Il prend ensuite votre caractère littéral
'c' code> et le promeut à
int code> avec une certaine valeur. Cet int est ensuite ajouté à l'adresse du littéral et utilisé comme c-string. Étant donné que vous avez dépassé l'espace alloué à votre chaîne littérale, les résultats sont indéfinis et il suffit d'imprimer des caractères de l'adresse obtenue jusqu'à ce qu'elle ait trouvé une null. P>
std :: string str = std :: String ("AB") + 'C'; Code>. Alternativement (comme le montre un commentaire séparé) le faire avec une concaténation qui peut être meilleure ou non performante. Utilisez ce qui semble plus clair dans votre cas:
std :: string str = "ab"; str + = 'c'; code>. p>
String code> a un opérateur
surchargé + code> qui fait la concaténation intuitive. P >
La réponse de Mark est correcte. Notez cependant que vous pouvez écrire "AB" "C" sans intervenant +, et le préprocesseur les concaténera pour vous.
Votre hypothèse est correcte, à l'exception du littéral de la chaîne n'est pas sur la pile, c'est dans un emplacement spécifique à une boîte à outils en mémoire, souvent dans une section en lecture seule. P>
Voir les autres réponses pour savoir comment faire la concaténation correctement. P> "AB" code> est un
const char * code>.
'c' code> est un
char code>. Je suppose que
'c' code> est converti en un entier, ledit entier est ajouté à l'adresse de
"AB" code>, et le pointeur résultant est transmis à
std :: String code> constructeur. Vous avez de la chance que cela ne s'écrase pas malablement. P>
Surcharge de l'opérateur ne fonctionne que lorsque au moins l'un des paramètres de l'opérateur surchargé est un type défini par l'utilisateur (c'est-à-dire une instance de classe), de sorte que l'opérateur + ne peut pas être surchargé pour ajouter une chaîne de caractères et un caractère. et faire quelque chose de sensible. Au mieux, vous obtiendrez le pointeur arithmétique étant effectué - presque certainement pas ce que vous voulez. Le travail habituel pour cela est une conversion explicite:
string s = string( "foo" ) + "bar"; // s will contain "foobar"
Je pense string str = "AB" + 'c'; code> fonctionne quelque chose comme:
stringstream ss; ss << "ab" << 'c';
Ceci est construit en C ++: sortie: p>