1

今日、久しぶりにこの変換を見ました:

void SomeFunction( LPCTSTR szText ) ...


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

正常にコンパイルされます。この変換について何か説明はありますか?

GetBuffer後で使用して解放したりnew LPTSTR、文字列の長さで を作成したりする必要がないため、ほとんど問題ないようです。

4

2 に答える 2

2

CStringへの変換演算子があるので、はい、これで問題ありませんLPCTSTR演算子への参照

msdn

C++ コンパイラは、CString を LPCTSTR に変換する CString クラス用に定義された変換関数を自動的に適用します。

したがって、明示的に への変換を使用する必要はありませんLPCTSTR

于 2012-08-09T08:23:31.543 に答える
1

はい、これでOKです。ドキュメントによると、返されたポインターの期間中に文字列を変更しないようにする必要があるだけで、コードは正常に動作しています。

これは基本的にCStringと同等ですstd::string::c_str()

通常、コードのようにキャストを明示的に使用する必要はありません。それを行う必要があると私が考えることができる唯一の理由は、さらに別の型に変換している場合です。たとえば、次のようSomeFunctionに定義されている場合です。

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

その場合、 からCStringへの暗黙的な変換はないため、中間としてstd::basic_string<TCHAR>使用する必要があります。LPCTSTR

于 2012-08-09T08:23:02.560 に答える