该标准是否定义了共同基础?
Does the Standard Define Common Bases?
strtol
,例如,将一个基数作为其最后一个参数
我发现在我的所有代码中传递幻数 10
是没有吸引力的。十进制基数是否已在标准中的某处定义?
我认为 strtol
没有任何标准的基本定义。但是,还有其他转换函数,它们将 10
作为 base 的默认参数,例如 std::stoi
which works on std::string
s, and the new std::from_chars
适用于 const char*
s.
I find passing in the magic number 10 in all over my code to be unappealing.
您可以将 0
用于 base
并让实现推导出基数。
auto v1 = strtol("101", nullptr, 0); // base is deduced to be 10
auto v2 = strtol("078", nullptr, 0); // base is deduced to be 8
auto v3 = strtol("0xF09", nullptr, 0); // base is deduced to be 16
没有为 strtol
定义的十进制基本默认值。您可以创建自己的代理函数,例如:
long int strtolBase10(const char *nptr, char **endptr)
{
return strtol(nptr, endptr, 10);
}
值得注意的是,如果您使用特殊值 0
作为基本参数,strtol 将解析为十进制,除非字符串以 '0x' 或 '0X' 开头(它将以 16 进制解析)或以“0”开头(它将以 8 为基数进行解析)。
strtol
,例如,将一个基数作为其最后一个参数
我发现在我的所有代码中传递幻数 10
是没有吸引力的。十进制基数是否已在标准中的某处定义?
我认为 strtol
没有任何标准的基本定义。但是,还有其他转换函数,它们将 10
作为 base 的默认参数,例如 std::stoi
which works on std::string
s, and the new std::from_chars
适用于 const char*
s.
I find passing in the magic number 10 in all over my code to be unappealing.
您可以将 0
用于 base
并让实现推导出基数。
auto v1 = strtol("101", nullptr, 0); // base is deduced to be 10
auto v2 = strtol("078", nullptr, 0); // base is deduced to be 8
auto v3 = strtol("0xF09", nullptr, 0); // base is deduced to be 16
没有为 strtol
定义的十进制基本默认值。您可以创建自己的代理函数,例如:
long int strtolBase10(const char *nptr, char **endptr)
{
return strtol(nptr, endptr, 10);
}
值得注意的是,如果您使用特殊值 0
作为基本参数,strtol 将解析为十进制,除非字符串以 '0x' 或 '0X' 开头(它将以 16 进制解析)或以“0”开头(它将以 8 为基数进行解析)。