【问题标题】:Improve readability of very large constants in C++ [duplicate]提高 C++ 中非常大常量的可读性 [重复]
【发布时间】:2015-05-16 15:59:05
【问题描述】:

在 C++ 中,有时您想要声明大数。有时很难看出你是否有正确数量的零。

const long long VERY_LARGE_NUMBER = 300000000000;

在像 OCaml 这样的语言中,您可以使用下划线分隔数字以提高可读性。

let x = 300_000_000_000;;

C++ 中是否有类似的机制?我见过类似= 1 << 31 2 的幂,但是对于非常大的 10 的幂呢?有时您要声明非常大的数字(例如竞赛编程中的数组边界),并且您希望确信您声明的数组大小是正确的。

我可以想到类似的东西:

const long long VERY_LARGE_NUMBER = 3 * (1 << (11 * 10 / 3));

...滥用1&lt;&lt;10 ~= 1000 得到接近 3 的 11 个零,但它很冗长且不准确。

【问题讨论】:

  • 有时十六进制表示会有所帮助。否则,我能想到的唯一方法就是在声明上方添加评论!
  • 您也可以对常数使用科学记数法,即const long long VERY_LARGE_NUMBER=3e11;
  • @Mat 非常棒的 c++14 功能
  • 这样的东西会有帮助吗? const long long VERY_LARGE_NUMBER = 3e10;

标签: c++


【解决方案1】:

自 C++14 起,整数文字支持使用 ' 作为分隔符。例如,unsigned long long l2 = 18'446'744'073'709'550'592llu;。有关详细信息,请参阅this cppreference page。此外,您可以考虑使用科学记数法,例如123e4。这样的文字是floating point literals。但是你可以将它们转换为整数类型。

【讨论】:

  • 从某种角度来看,浮点文字会更不可读,因为它应该立即引发对精度损失的担忧。
【解决方案2】:

怎么样

const long long VERY_LARGE_NUMBER =  (long long) 300 * 1000 * 1000 * 1000;

【讨论】:

  • 这就是我经常实现可读性的方法。如果您的环境支持,C++14 看起来正是您想要的。这在任何地方都有效且有效;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多