为什么在<double>STL中允许
why <double> is allowed in STL
我已经看到模板不能用double定义,因为它不是整数值。 例如,以下代码不会编译:
template <double x> double func()
{
return x;
}
但是,我想知道为什么在STL中允许定义双精度容器? 谢谢!
您正在混合类型名称和类型实例。 当您执行以下操作时:
template <int a> struct A {};
您正在声明一个模板结构,该结构将因标记而异,并且此标记是一个整数。 因此,A<1>
和A<2>
将是完全不同的类型。
当您执行以下操作时:
template <typename T> struct A { T a; A(T a) : a(a) {} };
您正在声明一个模板结构,该结构因给定的类型而异。因此,你不能这样写:A<1>
或A<2>
因为1
或2
不是一个类型,而是一个值。
您将编写A<int>
并且任何 int 都将使用相同的类型,因此A<int> a(1)
与A<int> b(2)
完全相同
您将模板类型参数与模板非类型参数混淆了。在您的示例中,参数是类型double
的值。在std::vector<double>
中,参数是类型double
。
double
值并不是真正用来比较相等的,而类型double
则没有这样的问题。
我想知道为什么在 STL 中允许定义双精度容器?
因为 double 的容器不需要具有 double 类型的模板非类型参数。该语言允许将任何类型的类型(包括 double(传递到模板类型参数中,这是泛型容器用于指定值类型的参数。
C++不允许将浮点文字用作模板非类型参数。Cf,整数类型:
template <int N> class foo{};
是允许的,但
template <double N> class bar{};
莫。这背后的理由是,浮点类型的许多实现不是由标准指定的。因此,很难确定哪种专业化bar
适用。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在STL容器中使用模板类
- C++在数学计算中将double转换为int
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- 在c++中为double类型的数组创建一个unique_ptr
- 在STL - C++中按成绩对学生列表进行排序?
- vector<vector<double>> to mxArray using memcpy
- (double) 和 double() 之间的区别
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- C++标准是否允许<double>在没有开销的情况下实现 std::可选
- λ可以适应STL吗?
- 为什么在<double>STL中允许
- STL vector of vector从double到unsigned int的转换