예, 괜찮습니다. strTest
이 유효한 포인터이고 i
이 유효한 색인이라고 가정합니다. strTest
은 CString*
이므로 strTest[i]
은 CString
입니다. 그리고 무료 operator==
과부하는 const CString&
을 param1로, LPCTSTR
을 param2로 받아들이고 예상 한대로 수행합니다.
MSDN 설명서는 here입니다.
MarkRansom
BOOL operator ==(const CString& s1, LPCTSTR s2);
(문서가 오래되어 나는 실제 코드로 추적 할 때 내가 보는 서명이 다르지만 효과는 동일) : 두 번째 오버로드는 중요한 하나입니다 귀하의 코드가 strTest[i]
을 문자열이 아닌 문자로 비교한다는 사실을 알려 주셨습니다. 여전히 operator==
과부하가 걸려서 CString
/char
이 걸리기 때문에 여전히 괜찮습니다. 내가에 링크 된 문서에 나와 있지만, 여기에 실제 코드는 VS2012 버전의 모습입니다 아니에요 :
가 오래된 문서에 나열되지 않은 이후로
friend bool operator==(
_In_ const CStringT& str1,
_In_ XCHAR ch2) throw()
{
return((str1.GetLength() == 1) && (str1[0] == ch2));
}
,이 기능이 아마도 항상 존재하지 않았다. 그러나 CString
에는 TCHAR
을 사용하는 암시 적 생성자가 있습니다. 위의 것보다 앞선 VC++ 버전에서 CString
은 암시 적으로 _T('\n')
에서 생성 된 다음 CString
/CString
과부하 operator==
에 대한 호출에 사용 된 것으로 가정합니다.
출처
2014-09-10 14:57:39
dlf
이것은 큰 따옴표가 아닌 리터럴 주위의 작은 따옴표이므로 'TCHAR'이며 'LPCTSTR'이 아닙니다. –
@MarkRansom True. 오타가 아닌지 확실하지 않지만 대답을 업데이트 할 것입니다. – dlf
답장을 보내 주셔서 감사합니다! 예, 실제 코드에는 작은 따옴표가 있습니다. 나는 조금 혼란스러워했다. 이제는 정리 된 것 같다. :) – 10100111001