C++14 引入了变量模板(Variable templates)。
template<class T>
constexpr T pi = T(3.1415926535897932385); // variable template
template<class T>
T circular_area(T r) // function template
{
return pi<T> * r * r; // pi<T> is a variable template instantiation
}
就二进制内存占用和运行时速度而言,使用它的开销是多少?
最佳答案
如果两者之间存在任何差异,我肯定会将其作为错误报告给编译器制造商:
template<class T>
constexpr T pi = T(3.1415926535897932385); // variable template
template<class T>
T circular_area(T r) // function template
{
return pi<T> * r * r; // pi<T> is a variable template instantiation
}
和
constexpr double pi = 3.1415926535897932385;
double circular_area(double r)
{
return pi * r * r;
}
如果将 double
替换为 float
也是一样。
一般来说,constexpr
应该在编译后的代码中直接求出相关常量。如果它不能这样做,那么编译器应该给出一个错误(因为它不是一个真正的 constexpr
)。
关于c++ - 变量模板的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35694936/