第 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()));