第14行的代碼無法編譯,因爲轉換沒有完成,但由於顯式轉換運算符,16,17中的代碼正常工作。轉換無法完成的原因
1
2 #include <iostream>
3 using namespace std;
4 template<typename T,int N>class Array{
5 private:
6 T _M_data[N];
7 public:
---- operator T*(){return _M_data;}
---- operator T(){return _M_data[0];}
++++ T* data(){return _M_data;}
10 };
11 int main(int argc,char*argv[])
12 {
13 Array<int,5> i5A ;
14 //printf("%d\n",i5A);
15 //won't work,need explicit conversion
16 printf("%d\n",i5A.operator int());
17 printf("%p\n",i5A.operator int*());
18 return 0;
19 }
更新:
我知道爲什麼標準需要一個data()
功能:printf("%d\n",*(i5A.data()));
看看va_init,va參數需要知道類型,因此打印完成時會超出給定的類型(%d => int),因此printf會設想您執行JOB。在C++中,cout使用方法覆蓋來爲所有類型確定相同的運算符<<。當你給不同類型的過載建立正確的操作員過載 – Lefsler