CString to TCHAR

Сегодня после долгого времени я видел это преобразование:

void SomeFunction( LPCTSTR szText ) ...


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

Это компилируется хорошо. Любые объяснения об этом преобразовании?

В основном это нормально, потому что мне не нужно использовать GetBuffer и выпустить его позже, ни создать newLPTSTR с длиной строки.

2 ответа

Решение

Да, это нормально, так как CString имеет оператор преобразования в LPCTSTR, ссылка на оператора

MSDN

Компилятор 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 как промежуточный.

Другие вопросы по тегам