当我问一个问题时,说明找到2的幂的最快方法是什么,我得到答案“预先计算它们并使用查找表”。
如何使用模板预先计算2的幂表?
链接到我之前的问题:Better way to find the powers of 2
答案 0 :(得分:4)
这是一个想法:
constexpr std::array<unsigned long long, 16> LUT = {
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 };
答案 1 :(得分:2)
template <int N>
struct pow2
{
enum { value = 2 * pow2<N - 1>::value };
};
template <>
struct pow2<0>
{
enum { value = 1 };
};
void foo()
{
const int x = pow2<4>::value; // == 16
const int y = pow2<0>::value; // == 1
int arr[x] = {0}; // Because x is constant
}
Live code here
我仍然希望1U << n
超过pow2<n>::value
,除非有强有力的证据表明性能下降。