#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()
문자열의 끝으로 e
std::string::const_iterator
-implicitly converted 될 수 함수 파라미터 실패하지만, 함수는 파라미터로서 전달 될 때, 명시 적으로 주조 될 수있다; 그렇지 않으면 컴파일 타임에 오류가 발생합니다. 왜 그런가요?암시 적 변환이
FYI, s.begin()
및 s.end()
은 모두 std::string::iterator
을 반환하는 것으로 보입니다.
식e
가와T2
이e
복사 초기화 할 수있는 경우에만, 즉 선언T2 t = e;
경우T2
에 암시 적으로 변환이라고합니다는 일부 임시 발명에 대해, (컴파일 할 수 있습니다) 잘 형성된다
t
.
감사합니다. 유효한 응답. 내 템플릿이 아닌 메소드를 사용하지 않는 것이 좋지 않습니다. –