CString to TCHAR
Сегодня после долгого времени я видел это преобразование:
void SomeFunction( LPCTSTR szText ) ...
CString str;
str.Format( "A Simple Sentence" );
SomeFunction( LPCTSTR( str ) );
Это компилируется хорошо. Любые объяснения об этом преобразовании?
В основном это нормально, потому что мне не нужно использовать GetBuffer
и выпустить его позже, ни создать new
LPTSTR
с длиной строки.
2 ответа
Да, это нормально, так как CString
имеет оператор преобразования в LPCTSTR
, ссылка на оператора
Компилятор C++ автоматически применяет функцию преобразования, определенную для класса CString, который преобразует CString в LPCTSTR.
Таким образом, вам не нужно использовать явное преобразование в LPCTSTR
,
Да, это нормально. Согласно документации, вам просто нужно убедиться, что вы не изменяете строку в течение срока действия возвращаемого указателя, что ваш код делает хорошо.
Это в основном CString
эквивалент std::string::c_str()
,
Обычно, хотя вам не нужно явно использовать приведение, как это делает ваш код. Единственная причина, по которой я могу подумать, что вам нужно это сделать, это если вы переходите на еще один тип, например, если SomeFunction
определяется как
void SomeFunction(const std::basic_string<TCHAR>& str);
В этом случае нет неявного преобразования из CString
в std::basic_string<TCHAR>
так что вам нужно использовать LPCTSTR
как промежуточный.