注册 登录
编程论坛 C++教室

模板没用 为什么

ml232528 发布于 2008-10-16 20:21, 731 次点击
明明强制转换为char型了 可是还是按int型算

#include<stdio.h>

template<typename T>
void two(T x);

int main()
{    
    two((char)1);//为什么没用
    getchar();
    return 0;
}

template<typename T>
void two(T x)
{
    int static n=sizeof(T)*8-1;//按理说T应该是char型 n为7 输出8位为才对
    if(n--)two(x>>1);
    if(x&1)printf("1");
    else printf("0");
}
7 回复
#2
中学者2008-10-16 21:07
函数里面的你转了吗?
#3
ml2325282008-10-16 21:11
T 不是代表char型吗
#4
中学者2008-10-16 21:14
if(n--)two((char)(x>>1));  1是内建的int...你用char和它右移...char的类型会跃迁变成int.

[[it] 本帖最后由 中学者 于 2008-10-16 21:24 编辑 [/it]]
#5
ml2325282008-10-16 21:41
谢谢楼上的结果对了

template<typename T>
void two(T x)
{
    int static n=sizeof(T)*8-1;//按理说T应该是char型 n为7 输出8位为才对
    if(n--)two((T)(x>>1));
    if(x&1)printf("1");
    else printf("0");
}

不过还是想不通
n的定义 int static n=sizeof(T)*8-1 应该只执行一次才对
难道说T的类型改变 n的定义还要重新执行一次
#6
中学者2008-10-16 21:44
这里生成了两个版本嘛..char和int的
#7
ml2325282008-10-16 21:58
谢谢 中学者
明白了 生成了两个不同的函数
#8
wyy123_20082008-10-16 23:00
我本来还想说几句,看来有人比我高明,还是算了
1