可能重复:
C++: Why can't I use float value as a template parameter?
我可以定义模板类:
template <int A> C {};
但我无法定义类似的类:
template <float A> C{};
我想在表达式中:
const float a = 10.0f;
a
是一个const实验,我可以用它来实例化一个float非类型模板参数
C<a> c();
但不幸的是,这是非法的。为什么呢?
答案 0 :(得分:2)
标准不允许这样做的一个可能动机是,相同的模板参数在被视为浮点数时可能会显得不同,因为并非所有浮点数都可以精确表示。例如,
C<1.0f/3.0f> c;
和
C<2.0f/6.0f> c;
属于同一类型吗?