今天看c++primer看到16.4.2节内容,非类型形参的模板实参
自己突发奇想非类型形参是否支持类型转换,于是键入double型数据,编译器提示模板形参错误(vs2010,error:表达式必须包含整数或枚举类型).
可见不仅不支持类型转换,更不能允许形参为整型与枚举类型之外的类型。
不见黄河不死心,于是将模板形参修改为double型来测试,发现在使用模板类型时显示声明的形参值还是必须键入整型,且编译不能通过。
编译错误提示:非类型模板参数的类型非法。
咦,枚举?于是想想为枚举成员提供double型数据再设置为模板的形参是什么情况呢,想到就做。
结果在初始化枚举类型成员的时候出错,error:表达式必须为整型常量表达式
翻书到枚举这一章c++primer54页:用来初始化枚举成员的值必须是一个常量表达式。double型数据就不是常量表达式?
刚想到这儿马上看见后面一句话:常量表达式是编译器在编译时就能够计算出结果的整型表达式。
噢,原来如此,暂且自己这样理解:常量表达式就是整型表达式,整型表达式在编译时就能够计算出结果。
这句话的意思不知道是不是意味着double型或其他非整型应该是在程序运行时才能计算出结果。。?
这是一个初学者的理解,如有错误欢迎指出..