#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
。
謝謝你們倆。有效答案。我不想嘗試非模板方法。 –