我已经看到模板不能用double定义,因为它不是整数值。例如,以下代码将无法编译:
template <double x> double func()
{
return x;
}
Run Code Online (Sandbox Code Playgroud)
但是,我想知道为什么在STL中允许定义double容器吗?谢谢!
您正在混合类型名和类型实例。当您这样做时:
template <int a> struct A {};
Run Code Online (Sandbox Code Playgroud)
您正在声明一个模板结构,该模板结构的标签会有所不同,并且此标签是整数。因此,A<1>与A<2>将完全不同的类型。
当您这样做时:
template <typename T> struct A { T a; A(T a) : a(a) {} };
Run Code Online (Sandbox Code Playgroud)
您要声明的模板结构会因给定的类型而有所不同。因此,您不能这样写:A<1>或A<2>因为1or 2不是类型而是值。
您将编写A<int>并且任何int都将使用相同的类型,因此A<int> a(1)与A<int> b(2)
您正在将模板类型参数与模板非类型参数混淆。在您的示例中,参数是type的值double。在std::vector<double>参数中是类型double。
double确实将arent的值与相等性进行比较,而类型没有这样的问题double。