问题描述
出于说明目的,我展示了两个小的,略有不同的模板化递归定义。一个使用enum
,另一个使用static constexpr
来定义一个值。
我已经检查了两个程序的输出程序集,它们完全相同,并且从语义上看它们也相同。
我认为constexpr
可能更现代,但是使用enum
/ static constexpr
之间是否有任何区别,或者在某些特定的使用案例中,区别真的很重要吗?
// using enum
template<uint64_t N>
struct Sum {
enum : uint64_t { value = N + Sum<N - 1>::value };
};
template<>
struct Sum<0> {
enum : uint64_t { value = 1 };
};
// using static constexpr
template<uint64_t N>
struct Sum {
static constexpr uint64_t value = N + Sum<N - 1>::value;
};
template<>
struct Sum<0> {
static constexpr uint64_t value = 1;
};
提取值:
#define sum(n) (Sum<n>::value)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)