나는이 질문 C ++ 장단점에 대한 답변을 읽었으며 의견을 읽는 동안이 의심을 얻었습니다.
프로그래머는 종종 "this"가 포인터이지만 참조가 아니라고 혼동합니다. 또 다른 혼란은 "hello"가 std :: string 유형이 아니지만 char const * (포인터)로 평가되는 이유입니다 (배열에서 포인터로 변환 한 후) – Johannes Schaub-litb
그것은 다른 언어와 같은 규칙을 사용하지 않는다는 것을 보여줍니다. – le dorfier 12 월 22 '08시 3:35
나는 "이것"을 아주 사소한 문제라고 부릅니다. 그리고 죄송합니다. 정의되지 않은 동작의 예에서 몇 가지 오류를 잡아 주셔서 감사합니다. :) 크기에 대한 정보가 첫 번째 정보와 관련이 있는지 이해하지 못합니다. 포인터는 단순히 할당 된 메모리 외부를 가리킬 수 없습니다. – jalf Dec 22 '08 at 4:18
이것은 지속적인 poiner입니까? – yesraaj 12 월 22 '08시 6:35
메소드가 const 인 경우 상수 일 수 있습니다. int getFoo () const; <-getFoo의 범위에서 "this"는 상수이므로 읽기 전용입니다. 이렇게하면 버그가 방지되고 호출자가 개체가 변경되지 않는다는 일정 수준의 보증을 제공합니다. – 더그 티.
"this"를 재 할당 할 수 없습니다. 즉,이 값은 rvalue이므로 "this = & other;"를 수행 할 수 없습니다. 그러나 이것은 T const 유형이 아닌 T * 유형입니다. 즉, 일정하지 않은 포인터입니다. const 메소드에 있다면 const에 대한 포인터입니다. T const. 그러나 포인터 자체는 불변이다 – Johannes Schaub-litb 12 월 22 '08시 17:53
"this"를 다음과 같이 생각하십시오 : # 컴파일러가 "this_"를 객체에 대한 포인터로 생성하고 "this"를 키워드로 만드는 this (this_ + 0)를 정의하십시오. (this_ + 0)이 rvalue이므로 "this"를 할당 할 수 없습니다. 물론 그것은 그 방법이 아닙니다 (그런 매크로는 없습니다), 그러나 그것을 이해하는 데 도움이 될 수 있습니다 – Johannes Schaub-litb Dec 22 '08 at 17:55
내 질문은 this
포인터 가 왜 참조가 아닌가? 그것을 포인터로 만드는 특별한 이유가 있습니까?
this
참조가되는 이유 에 대한 몇 가지 추가 주장 :
- 고려
Item 1
에서More Effective C++
우리가 유효한 개체 즉이 아닌 NULL (내 해석)이 보장 될 때 사용 참조 :. - 또한 참조는 포인터보다 안전한 것으로 간주됩니다 (왜냐하면 포인터가 길어지면 메모리를 망칠 수 없기 때문입니다).
- 셋째, 참조 (
.
) 에 액세스하기위한 구문은 포인터 (->
또는(*)
)에 액세스하는 것보다 약간 좋고 짧습니다 .
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
항상 평가 되지true
않습니까?