c++ - 变量模板的开销

标签 c++ c++14 variable-templates

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/

相关文章:

c++ - 变量模板和 std::enable_if

c++ - 以交替模式合并两个 STL vector

C++ 继承问题

c++ - 运行良好,但在完成之前崩溃

c++ - 变量模板 + std::map 的通用 lambda

c++ - 引用折叠和 const

c++ - 转发声明一个 constexpr 变量模板

c++ - 如何在 C++ 中使用 << 将 unsigned/signed char 或 <cstdint> 类型输出为整数

c++ - 通用类型转换

c++ - 使用 std::enable_if 的多变量模板特化