类模板中非类型参数的模板实参

1,绑定给非类型参数的表达式必须是一个常量表达式,即,它必须能在编译时被计算出结果。

2,非 const 对象的值不是一个常量表达式,它不能被用作非类型模板参数的实参

3,名字空间域中任何对象的地址,即使该对象不是const 类型,是一个常量表达式,而局部对象的地址则不是。

4, sizeof表达式的结果是一个常量表达式,所以它可以被用作非类型模板参数的实参。

对于一个模板非类型参数,如果两个不同的表达式的求值结果相同,则它们被认为是等价的模板实参。

在模板实参的类型和非类型模板参数的类型之间允许进行一些转换,能被允许的转换集是函数实参上被允许的转换的子集:

1 左值转换:包括从左值到右值的转换,从数组到指针的转换,以及从函数到指针的转换。

2 限定修饰转换 例如:从 int* 到 const int* 的转换。

3 提升 例如:// 从 short 到 int 的提升

4 整值转换 例如:// 从 int 到 unsigned int 的转换。

把整型0 转换成指针值的转换是不允许的。

template <int *ptr>
class BufPtr { ... };
 
// 错误: 0 的类型是 int
// 不能通过 隐式转换 隐式地转换到空指针
BufPtr< 0 > nil;



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值