はい、大丈夫です (strTest
が有効なポインターでi
あり、有効なインデックスであると仮定します)。strTest
は であるため、CString*
はstrTest[i]
ですCString
。また、 as param1 とas param2operator==
を受け取り、期待どおりの動作をする無料のオーバーロードがあります。const CString&
LPCTSTR
MSDN のドキュメントはこちらです。2 番目のオーバーロードが重要です。
BOOL operator ==( const CString& s1, LPCTSTR s2 );
(ドキュメントは古く、実際のコードをたどったときに表示される署名は異なりますが、効果は同じです)
MarkRansom は、コードstrTest[i]
が文字列ではなく文字と比較されるという事実を警告してくれました。/operator==
を取るオーバーロードもあるので、それでも問題ありません。リンク先のドキュメントには記載されていませんが、VS2012 バージョンでの実際のコードは次のようになります。CString
char
friend bool operator==(
_In_ const CStringT& str1,
_In_ XCHAR ch2) throw()
{
return( (str1.GetLength() == 1) && (str1[0] == ch2) );
}
古いドキュメントには記載されていないため、この関数はおそらく常に存在していたわけではありません。ただし、CString
を受け取る暗黙のコンストラクターがありTCHAR
ます。上記よりも前の VC++ バージョンでは、 aCString
が暗黙的に構築され、 の/オーバーロード_T('\n')
への呼び出しで使用されると想定しています。CString
CString
operator==