1

很长一段时间后,今天我看到了这种转换:

void SomeFunction( LPCTSTR szText ) ...


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

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

看起来大部分都可以,因为我不需要GetBuffer稍后使用和释放它,也不需要创建new LPTSTR带有字符串长度的a。

4

2 回答 2

2

是的,这没关系,因为CString有转换运算符到LPCTSTR. 参考运营商

微软

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

因此,您不需要使用显式转换为LPCTSTR.

于 2012-08-09T08:23:31.543 回答
1

是的,这没关系。根据文档,您只需要确保在返回指针期间不要修改字符串,您的代码运行良好。

这基本上CString相当于std::string::c_str().

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

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

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

于 2012-08-09T08:23:02.560 回答