de cout et de concaténation de chaînes
Je viens de revoir mes C++. J'ai essayé de faire ceci:
#include <iostream>
using std::cout;
using std::endl;
void printStuff(int x);
int main() {
printStuff(10);
return 0;
}
void printStuff(int x) {
cout << "My favorite number is " + x << endl;
}
Le problème se produit dans le printStuff
fonction. Quand je le lance, les 10 premiers caractères de "Mon numéro préféré est ", est omis de la sortie. La sortie est "numéro" e " est ". Le nombre n'a même pas de se présenter.
La façon de résoudre ce problème est de faire
void printStuff(int x) {
cout << "My favorite number is " << x << endl;
}
Je me demande ce que l'ordinateur/le compilateur fait en coulisses.
Vous devez vous connecter pour publier un commentaire.
C'est simple arithmétique des pointeurs. Le littéral de chaîne est un tableau ou
char
s et sera présenté comme un pointeur. Vous ajoutez 10 à le pointeur de dire que vous voulez à la sortie de la 11ème caractère.Il n'y a pas d'opérateur + qui permettrait de convertir un nombre en une chaîne de caractères et de les enchaîner à un tableau de char.
Le + opérateur surchargé, ce n'est pas la concaténation d'une chaîne puisque x est un entier. La sortie est déplacé par rvalue fois dans ce cas. Donc, les 10 premiers caractères ne sont pas imprimés. Vérifier cette de référence.
si vous allez écrire
il travaillera
de l'ajout ou de incrémentation d'une chaîne n'a pas d'incrément de la valeur qu'il contient, mais il s adresse:
c'est pas le problème de msvc 2015 ou de cout, mais c'est plutôt le déplacement dans la mémoire de l'arrière/vers l'avant:
pour vous prouver que le cout est innocent: