regarder le code simple suivant:Pourquoi les opérations string :: append se comportent-elles étrangement?
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s("1234567890");
string::iterator i1 = s.begin();
string::iterator i2 = s.begin();
string s1, s2;
s1.append(i1, ++i1);
s2.append(++i2, s.end());
cout << s1 << endl;
cout << s2 << endl;
}
ce que vous attendez-vous que la sortie soit?
voulez-vous, comme moi, attendent que ce soit:
1
234567890
mal! est:
234567890
à-dire la première chaîne est vide. Les coutures qui préfixent l'opérateur d'incrémentation posent problème avec les itérateurs. ou ai-je oublié quelque chose?
I Je ne suis pas l'un des downvoters ici, mais je suggère qu'ils découlent de votre suggestion que vous avez trouvé un bug de compilateur. Tout le monde a un "Ai-je trouvé un bug dans?" moment tôt (dans mon cas c'était libm), et ils ont tous tort. Si vous trouvez tous un bug dans quelque chose qui est fortement utilisé, ce sera après avoir beaucoup d'expérience avec l'outil en question. –
dmckee
Pourquoi les downvotes? Est-ce que SO est plein de développeurs GCC qui se sont sentis personnellement fait allusion? (Je veux dire les développeurs * de * GCC) – Manuel
@Manuel: downvoting en raison de la façon dont la question a été posée. Voir http://catb.org/~esr/faqs/smart-questions.html # id382249. Même si cela avait été un bug, ce n'est pas le bon forum pour les rapports de bugs. Et le titre est inutilement générique. Au moins, il y avait une bonne recette de repro. – user9876