#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;
}
Конец строки s.end()
может быть implicitly converted к std::string::const_iterator
, как e
, но когда она передается в качестве параметра функции, она должна быть явно отлиты; в противном случае во время компиляции возникает ошибка. Почему это?неявное преобразование не может быть в параметре функции
FYI, s.begin()
и s.end()
оба, кажется, возвращают std::string::iterator
.
Выражение
e
называется неявно конвертируются вT2
тогда и только тогда, когдаT2
можно скопировать инициализируется изe
, то есть декларацияT2 t = e;
хорошо сформированным (может быть скомпилирован), для некоторых изобретен временногоt
,
Спасибо вам. Действительные ответы. Мое плохое, не пробовав не шаблонные методы. –