-2
나는 다음과 같은 코드가 있습니다자동 출품서를 참조 하시겠습니까?
#include <iostream>
template<typename T>
void gaga(T * a){
std::cout << "gaga(T * a)";
}
template<typename T> class A{};
template<typename T>
void gaga(A<T> & a){
std::cout << "gaga(A<T> & a)\n";
}
template<typename T>
class B {
public:
T * p;
operator T*() const{
std::cout << "Cast called" <<std::endl;
return p;
}
};
int main()
{
B< A<int> > b;
gaga(*b); /// WHAT IS GOING ON HERE? WHY is void gaga(A<T> & a) CALLED?
A<int> * p;
gaga(p); /// WHEN THE ABOVE calls void gaga(A<T> & a) WHY is here
/// void gaga(T * a) CALLED???
}
을 내가 분명히 A<T> *
그런데 왜의 변환 연산자에 의해 발생하는 *b
로를 호출 할 때 난 정말 왜 gaga(A<T> & a)
가 호출 의아해하고있다 ?? --->*b
은 역 참조 연산자조차도 정의되지 않았습니다! 왜 그걸 gaga(A<T> & a)
에게 건네 줄 수 있습니까?
설명해 주셔서 감사합니다.
'AA'란 무엇입니까? ... – Brian
죄송합니다. AA는 A이어야합니다. – Gabriel
'연산자 T *() const' 줄은 무엇을 알고 있습니까? –