#include <iostream>
#include <string>
int main() {
using std::string;
using std::distance;
using std::cout;
using std::endl;
string s("abc");
string::const_iterator b = s.begin();
string::const_iterator e = s.end(); // success
cout << distance(b, e) << endl;
cout << distance(b, static_cast<string::const_iterator>(s.end())) << endl;
cout << distance(b, s.end()) << endl; // error
return 0;
}
Fin de la chaîne s.end()
peut être implicitly converted-std::string::const_iterator
comme e
, mais quand il est passé comme paramètre de fonction, il doit être explicitement casted; sinon, une erreur est générée lors de la compilation. Pourquoi donc?conversion implicite échoue dans le paramètre de la fonction
FYI, s.begin()
et s.end()
semblent tous deux renvoyer std::string::iterator
.
Une expression
e
est dit convertible implicitementT2
si et seulement siT2
peut être copier-initialisés dee
, qui est la déclarationT2 t = e;
est bien formée (peut être compilé), pour certains inventèrentt
temporaire .
Merci à vous deux. Réponses valides Mon mauvais ne pas essayer les méthodes non-modèle. –