很长一段时间后,今天我看到了这种转换:
void SomeFunction( LPCTSTR szText ) ...
CString str;
str.Format( "A Simple Sentence" );
SomeFunction( LPCTSTR( str ) );
它编译好。关于这种转换的任何解释?
看起来大部分都可以,因为我不需要GetBuffer
稍后使用和释放它,也不需要创建new
LPTSTR
带有字符串长度的a。
是的,这没关系。根据文档,您只需要确保在返回指针期间不要修改字符串,您的代码运行良好。
这基本上CString
相当于std::string::c_str()
.
通常,尽管您不需要像代码那样显式使用强制转换。我认为您需要这样做的唯一原因是,如果您要转换为另一种类型,例如 ifSomeFunction
定义为
void SomeFunction(const std::basic_string<TCHAR>& str);
在这种情况下,没有从CString
to的隐式转换,std::basic_string<TCHAR>
因此您需要LPCTSTR
用作中间人。