關于CString的兩個問題
讀CString,string,char*的綜合比較(一)
1 CString的基類
在《比較》一文中,寫到:
“CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)為Visual C++中最常用的字符串類,繼承自CSimpleStringT類,主要應用在MFC和ATL編程中,主要數據類型有char(應用于ANSI),wchar_t(unicode),TCHAR(ANSI與unicode均可);”
我第一感覺就是文章寫錯了,因為我看過CString的源碼的啊:








































但是看文章的樣子,也不像是粗制濫造的,心里很是疑惑。
后來再打開VC7的源碼看,果然:
typedef ATL::CStringT< TCHAR, StrTraitMFC< TCHAR > > CString;
看來微軟在不知不覺中做了這么大的變化。
2
“string是方便的,可以從幾乎所有的字符串構造而來,包括CString和char*;
CString次之,可以從基本的一些字符串變量構造而來,包括char*等; ”
的確,如下的代碼是可以編譯的:
CString strTest = "test";
string sTest(strTest);
string sTest(strTest);
但是這是表明string比CString方便嗎?
實際上,在string sTest(strTest);中有一個函數被調用,就是:
_AFX_INLINE CString::operator LPCTSTR() const
{ return m_pchData; }
{ return m_pchData; }
然后才是string構造生成,這能說是string比CString方便嗎?應該說是CString比string方便才好。
雖然可以用
CString strTest(sTest.c_str() );
來初始化CString,但是CString沒有參數為string的構造函數,也是一個小小的遺憾,畢竟string是c++標準庫的一部分了。