为什么float非类型模板参数在C ++中是非法的?是否没有浮点const实验?

时间:2012-07-17 08:15:56

标签: c++ templates

  

可能重复:
  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();

但不幸的是,这是非法的。为什么呢?

1 个答案:

答案 0 :(得分:2)

标准不允许这样做的一个可能动机是,相同的模板参数在被视为浮点数时可能会显得不同,因为并非所有浮点数都可以精确表示。例如,

C<1.0f/3.0f> c;

C<2.0f/6.0f> c;

属于同一类型吗?