C++中的类模板 *data问题。。

#include<iostream>
using namespace std;
template<typename T>
T total(T *data){ (这里的*data是指针么?T *data代表什么?)
T s=0;
while(*data) s+=*data++;(这里的s是代表什么?)
return s;
}
int main(){
int x[]={2,4,6,8,0,12,14,16,18};
cout<<total(x);
return 0;
}
新手求解答。。

首先这个不叫类模板,而应该叫函数模板,专门用来生产函数
*data不是指针,而data才是指针,*data是表示data指针所指向的值
T *data表示一个形式参数,然后就可以在函数体内使用data这个指针变量了,这里扮演的角色就是类型为T的一个数组的首地址

显然这是一个求和的函数,
s就是总和,
while(*data) s+=*data++;
由于后缀自加运算优先级高于*(指针),所以就相当于:
while(*data!=0)s=s+*(data++);
也就是说,初始s=0,然后每次将data所指向的T类型值加到s,并且将data这个指针指向下一个地址,直到data所指向的T类型值为0,循环结束追问

哦,谢谢,那这个while(*data)里面的*data都是*data!=0的意思吗?还是只是在这里是这样?

追答

嗯,while条件判断,0就是false,非0就是true
while在true的条件下才执行循环,也就是*data要非0,*data!=0

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-16
*data 是指针,指向存储data的地址。data的类型是T,具体跟你实例化这个模板时选择的类型有关
s的类型也是T

就你这个调用来看,T的类型是int
int x[]={2,4,6,8,0,12,14,16,18};定义了一个int型数组,x是数组首个元素的地址,在调用total时便将T实例化为int了
第2个回答  2013-05-16
data其实就是T类型的指针变量,*data就是date指针指向的对象,T *data这里是在定义一个T类型的形参指针变量data,是代表T s=0;这里定义的s变量
第3个回答  2013-05-16
不好意思 我也不懂
相似回答