我想在执行
时安全地最小化数组所需的缓冲区std::string integer_like_type::to_string(long long value){
std::array<char, WHAT_DO_I_PUT_HERE? +1> buffer;
int imGood = std::sprintf( buffer, "%d", value);
std::assert( imGood >= 0 );
return std::string( buffer );
}
“limits.h”根本没用。
我希望它作为模板参数。
我不是要求
while ( value/=10 ){ digits++; }
的解决方案。
答案 0 :(得分:4)
您可以使用std::numeric_limits在编译时查询有关数字类型的信息。您正期待max_digits10:
std::array<char, std::numeric_limits<long long>::max_digits10 + 1> buffer;
答案 1 :(得分:2)
答案 2 :(得分:0)
我认为一种常见的方法是
ceil(log10(LLONG_MAX)) + 1;
注意这是运行时因此可能不是最好的答案,使编译时宏可能是一个更好的主意。