由于没有进行转换,第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 }
Run Code Online (Sandbox Code Playgroud)
更新:
我知道为什么标准需要一个data()功能:printf("%d\n",*(i5A.data()));
printf是一个原始而简单的功能.它不知道你传递给它的类型,更不用说如何转换它们.如果你指定"%d",它只会读取你传递的参数int,吐出并继续下一个参数.或崩溃.只是不要这样做.如果你做出承诺,保留它 - 这%d是你传递的承诺int.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |