在 Ada 中,可以写下划线来分隔数字,这大大提高了可读性。例如:1_000_000(相当于 1000000) C++ 有类似的方法吗?
编辑:这是关于源代码的问题,而不是 I/O。
在 Ada 中,可以写下划线来分隔数字,这大大提高了可读性。例如:1_000_000(相当于 1000000) C++ 有类似的方法吗?
编辑:这是关于源代码的问题,而不是 I/O。
从 C++14 开始,您可以'
用作数字组分隔符:
auto one_m = 1'000'000;
以前版本的 C++ 本身并不支持这一点。有两个主要的解决方法:
在 C++11 中使用用户定义的文字;这将允许您编写如下代码:
auto x = "1_000_000"_i;
(把它写成 aconstexpr
会比较棘手——但绝对有可能。)
使用简单的宏,这将允许以下代码:
auto x = NUM(1,000,000);
目前没有办法做到这一点。但是,有人提议引入数字分隔符 (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
它只是从给定的文字中删除所有逗号并将其转换为整数。
int main()
{
int x = 1e6;
}
你总是可以定义一个可变参数宏,像N(123,456,678)
. 不过,这比它的价值要麻烦得多。特别是,您可能必须解决一些用于计算参数的可移植代码的可视化 C++ 特性。
imbue()
通过使用适当的语言环境方面(在本例中为num_put)输入 I/O 流,您正在寻找的内容完全可能。
(这是假设您在谈论 I/O。如果您在谈论源本身,那么从 C++11 开始这是不可能的。)