19

在 Ada 中,可以写下划线来分隔数字,这大大提高了可读性。例如:1_000_000(相当于 1000000) C++ 有类似的方法吗?

编辑:这是关于源代码的问题,而不是 I/O。

4

5 回答 5

14

从 C++14 开始,您可以'用作数字组分隔符

auto one_m = 1'000'000;

以前版本的 C++ 本身并不支持这一点。有两个主要的解决方法:

于 2013-04-04T15:54:35.753 回答
10

目前没有办法做到这一点。但是,有人提议引入数字分隔符 (N3499)。不过,他们还没有选择要使用哪个字符作为分隔符。目前的建议是:

  • 空间:4 815 162 342
  • 重音:4`815`162`342
  • 单引号:4'815'162'342
  • 下划线:4_815_162_342

不幸的是,它们都存在提案中描述的问题。

您可以使用用户定义的文字来采用 hacky 方法:

long long operator "" _s(const char* cstr, size_t) 
{
    std::string str(cstr);
    str.erase(std::remove(str.begin(), str.end(), ','), str.end());
    return std::stoll(str);
}

int main()
{
    std::cout << "4,815,162,342"_s << std::endl;
}

这将打印出:

4815162342

它只是从给定的文字中删除所有逗号并将其转换为整数。

于 2013-04-04T15:38:32.583 回答
4
int main()
{
   int x = 1e6;
}
于 2013-04-04T21:33:19.443 回答
2

你总是可以定义一个可变参数宏,像N(123,456,678). 不过,这比它的价值要麻烦得多。特别是,您可能必须解决一些用于计算参数的可移植代码的可视化 C++ 特性。

于 2013-04-04T15:57:22.423 回答
0

imbue()通过使用适当的语言环境方面(在本例中为num_put)输入 I/O 流,您正在寻找的内容完全可能。

(这是假设您在谈论 I/O。如果您在谈论源本身,那么从 C++11 开始这是不可能的。)

于 2013-04-04T15:46:08.743 回答