CString到TCHAR

时间:2012-08-09 08:16:41

标签: c++ cstring tchar

很长一段时间以来,我看到了这种转变:

void SomeFunction( LPCTSTR szText ) ...


CString str;
str.Format( "A Simple Sentence" );
SomeFunction( LPCTSTR( str ) );

编译好。关于这种转换的任何解释?

看起来大概没问题,因为我不需要使用GetBuffer并稍后发布它,也不需要创建一个带有字符串长度的new LPTSTR

2 个答案:

答案 0 :(得分:2)

是的,这是可以的,因为CString将转换运算符设置为LPCTSTRreference to operator

msdn

C ++编译器自动应用定义的转换函数 用于将CString转换为LPCTSTR的CString类。

因此,您无需使用显式转换为LPCTSTR

答案 1 :(得分:1)

是的,这没关系。根据{{​​3}},您只需要确保在返回指针的持续时间内不修改字符串,您的代码正常。

这基本上是CString等效的std::string::c_str()

通常,您不需要像代码那样明确使用强制转换。我认为您需要这样做的唯一原因是,如果您要转换为另一种类型,例如SomeFunction被定义为

void SomeFunction(const std::basic_string<TCHAR>& str);

在这种情况下,没有从CStringstd::basic_string<TCHAR>的隐式转换,因此您需要使用LPCTSTR作为中间人。