该标准是否定义了共同基础?

Does the Standard Define Common Bases?

strtol,例如,将一个基数作为其最后一个参数

我发现在我的所有代码中传递幻数 10 是没有吸引力的。十进制基数是否已在标准中的某处定义?

我认为 strtol 没有任何标准的基本定义。但是,还有其他转换函数,它们将 10 作为 base 的默认参数,例如 std::stoi which works on std::strings, 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 为基数进行解析)。