【发布时间】:2019-03-06 13:55:12
【问题描述】:
所以我需要log10 功能来查找存储给定整数所需的字符数。但我想在编译时得到它,以根据我的代码中定义的这些整数常量静态确定 char 数组的长度。不幸的是 log10 不是 constexpr 函数,即使是整数版本。我可以制作这样的完整版本:
template <typename T>
constexpr enable_if_t<is_integral_v<T>, size_t> intlen(T param) {
size_t result{ 1U };
while(T{} != (param /= T{ 10 })) ++result;
return result;
}
这最终将允许我这样做:const char foo[intlen(13) + 1U]
c++ 是否已经为此提供了一个工具,还是我必须自己定义?
【问题讨论】:
-
你的问题到底是什么?
-
@DanM。 “c++ 是否已经为此提供了一个工具,还是我必须自己定义?”
-
const char foo [] = "13"有什么问题?这会将foo初始化为三个char的数组,而无需输入两次13。 -
@Peter:更好的例子可能是:
char buffer[intlen(UINT_MAX)+1u];,它创建了一个足够大的缓冲区来容纳任何无符号整数。 -
@Peter:好的,这对于 UINT_MAX(和类似变量)的 特定 示例来说很好,但是如果您有其他限制,则能够创建适当大小的缓冲区很有用。 (反对票 - 他们已经消失了。当时是 -2)。
标签: c++ c++ constexpr c-strings string-length logarithm