operator질문드립니다
416
작성한 질문수 11
class NullPtr
{
public:
template<typename T>
// #1
operator T* () const
{
return 0;
}
// #2
template<typename C, typename T>
operator T C::* () const
{
return 0;
}
private:
// #3
void operator&() const;
};
nullptr보다 operator로 구현하는 부분이 궁금해서 질문 드립니다.
1) 코드에서 #1과 #2에 operator선언시 operator앞에 return 타입을 따로 지정하지 않았는데도 오류가 발생하지 않는 데 operator의 return값은 항상 명시하지 않아도 되나요?
2) #2에서 선언한 operator가 이해가 잘 안되는데 C라는 클래스의 멤버함수 포인터를 T라는 타입으로 받아준다(?)라고 하셨는데 그럼 이건 operator를 선언할때 선언부의 해석을 어떤순서로 해야 하는건가요? C::*타입을 T로 typedef한것과 같은 의미로 봐야 하는걸까요? operator를 해석할때마다 정확한 기준이 잡혀있지 않아 항상 혼돈이 옵니다 ㅠㅠ
3) #3에서는 operator의 리턴 타입이 void로 명시되어 있습니다. #1과 #2와는 다르게 operator앖에 리턴 타입이 명시된 경우는 어떤 경우인가요? void를 빼면 build error가 발생하는데 #1과 #2와 어떤 차이가 있는지 궁금합니다.
답변 1
0
operator의 문제가 아니고 template<T>으로 만들 경우
실제로 사용하기 전까지는 코드가 만들어지지 않습니다.
그래서 아무 문제 없이 빌드가 통과되는 것이죠.
문법은 이론으로 알기 보다 다양한 실험을 해야 오래 남습니다.
2번은 breakpoint를 걸고 이런 저런 실험을 해보시기 바랍니다.
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
561
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
456
1
strcpy() 구현 관련 질문
0
546
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
478
1
클래스 타입의 포인터 질문합니다
0
562
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
505
1
템플릿 특수화 관련 질문
0
393
1
포인터 관련 질문합니다!
0
276
1
Unable to start assembler. Check your settings.
0
852
2
cpu선택
0
552
1
포인터 질문이 있습니다
0
336
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
593
1
iterator 삭제관련
0
419
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
316
1
15 분 45초 대 질문
0
319
0
스택 프레임 질문합니다!
2
316
1
오른값 참조 in 게임
0
394
0
동적할당 질문이 있습니다
0
460
1
안녕하세요 메모리에 대해 질문드립니다.
0
314
1
함수객체 의 매개변수
0
370
1
복사생성자
0
442
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
431
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
360
1
스택 오버플로우
2
804
1





