有没有办法在C++源代码中用空格写一个大数字,以使其更具可读性?

Mak*_*gan 43 c++ syntax numbers

想象一下,我有代码:

vector<int> temp = vector<int>(1 000 000 000);
Run Code Online (Sandbox Code Playgroud)

上面不会编译,因为编译器会抱怨空格.是否可以指示C++在编译时省略这些空格,或者使数字更容易阅读?

小智 103

尝试数字分隔符:

int i = 1'000'000'000;
Run Code Online (Sandbox Code Playgroud)

此功能是从C++ 14开始引入的.它使用单引号(')作为数字分隔符.


另见:

  • 它也适用于其他基地.hex:`0x01'ff`,八进制:`0'777`,二进制:`0b0000'1111'0000` :) (13认同)

Fak*_*ame 30

当我在没有C++ 14(通常用于微处理器)的平台上做类似的事情时,我通过乘法将它分开来表示大数:

int i = (1000 * 1000 * 1000);
Run Code Online (Sandbox Code Playgroud)

添加ULL后缀以品尝

这里的优点是它基本上符合支持C89(可能更早)的任何平台.

通常,假设乘法运算符在编译时会失效可能是安全的,但如果你在循环中使用这样的常量,那么可能值得进行双重检查.

  • 这在具有16位int的系统上不起作用.类似地,虽然`1000'000'000'000`(或没有's`将在32位-int`系统上给你一个'long long`,你的方法是1000*1000*1000*由于溢出,1000`将有UB.你需要使用`long long`文字,例如`1000LL*1000*1000*1000`. (9认同)

小智 10

我通常为这个目的#define常量,因为它可以节省计数零,并且非常清楚你对查看代码的人意味着什么.例如

#define THOUSAND 1000
#define MILLION 1000000

vector<int> temp = vector<int>(THOUSAND * MILLION);
Run Code Online (Sandbox Code Playgroud)

这清楚地表明我真的意味着千万并且没有错误地计算零

显然,如果您愿意,可以使用枚举.

  • 如果您的同事离开公开会话,请替换为"#define MILLION 100000".:) (14认同)
  • 对于任何对"十亿"超过"十亿"的选择感到好奇的人 - ["十亿"并不总是意味着1e9](https://en.wikipedia.org/wiki/Billion).通常情况下,使用明确的,如果稍微有点思想性的术语更好,因为这会让人们不知道为什么他们的价值会减少几个数量级,或者甚至可能是"随机",因为它们正在包装. (10认同)

归档时间:

查看次数:

6651 次

最近记录:

7 年,6 月 前