很长一段时间以来,我看到了这种转变:
void SomeFunction( LPCTSTR szText ) ...
CString str;
str.Format( "A Simple Sentence" );
SomeFunction( LPCTSTR( str ) );
编译好。关于这种转换的任何解释?
看起来大概没问题,因为我不需要使用GetBuffer
并稍后发布它,也不需要创建一个带有字符串长度的new
LPTSTR
。
答案 0 :(得分:2)
是的,这是可以的,因为CString
将转换运算符设置为LPCTSTR
。 reference to operator
C ++编译器自动应用定义的转换函数 用于将CString转换为LPCTSTR的CString类。
因此,您无需使用显式转换为LPCTSTR
。
答案 1 :(得分:1)
是的,这没关系。根据{{3}},您只需要确保在返回指针的持续时间内不修改字符串,您的代码正常。
这基本上是CString
等效的std::string::c_str()
。
通常,您不需要像代码那样明确使用强制转换。我认为您需要这样做的唯一原因是,如果您要转换为另一种类型,例如SomeFunction
被定义为
void SomeFunction(const std::basic_string<TCHAR>& str);
在这种情况下,没有从CString
到std::basic_string<TCHAR>
的隐式转换,因此您需要使用LPCTSTR
作为中间人。