#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;
}
Ende der Schnur s.end()
implicitly converted zu std::string::const_iterator
als e
sein kann, aber wenn es als Funktionsparameter übergeben wird, hat es explizit gegossen werden; Andernfalls wird ein Fehler in der Kompilierzeit ausgelöst. Warum das?implizite Konvertierung nicht in Funktionsparameter
FYI, s.begin()
und s.end()
scheinen beide std::string::iterator
zurückzukehren.
Ein Ausdruck
e
gesagt wirdT2
implizit konvertierbar sein, wenn und nur wennT2
ause
kopieren initialisiert werden, dass die Erklärung istT2 t = e;
wohlgeformt (kompiliert werden kann), für einiget
temporäre erfunden .
Danke euch beiden. Gültige Antworten Mein Fehler, keine Nicht-Template-Methoden auszuprobieren. –