-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???
}
,我真的很困惑,爲什麼gaga(A<T> & a)
被稱爲當我*b
叫它這顯然由轉換操作導致A<T> *
但爲什麼? --->*b
是一個解引用運算符,甚至沒有定義!??爲什麼可以交給gaga(A<T> & a)
?
感謝您的解釋!
什麼是'AA'?... – Brian
對不起編輯過的東西,AA應該是A – Gabriel
你知道'operator T *()const'的行嗎? –