在很长一段时间后的今天,我看到了这个转换:
void SomeFunction( LPCTSTR szText ) ...
CString str;
str.Format( "A Simple Sentence" );
SomeFunction( LPCTSTR( str ) );编译正常。关于这个转换有什么解释吗?
这看起来很好,因为我不需要使用GetBuffer并在以后发布它,也不需要创建一个具有字符串长度的new LPTSTR。
发布于 2012-08-09 16:23:32
是的,这是可以的,因为CString有到LPCTSTR的转换操作符。reference to operator
msdn
C++编译器自动应用为将CString转换为LPCTSTR的CString类定义的转换函数。
因此,您不需要显式地使用转换为LPCTSTR。
发布于 2012-08-09 16:23:03
是的,这样就可以了。根据documentation,您只需确保在返回指针期间不修改字符串,您的代码运行得很好。
这基本上是std::string::c_str()的CString等价物。
通常,您不需要像代码那样显式地使用强制转换。我认为您需要这样做的唯一原因是您要转换为另一种类型,例如,如果SomeFunction被定义为
void SomeFunction(const std::basic_string<TCHAR>& str);在这种情况下,不存在从CString到std::basic_string<TCHAR>的隐式转换,因此需要使用LPCTSTR作为中间转换。
https://stackoverflow.com/questions/11879292
复制相似问题