在Ada中,可以使用下划线来编写用于分隔数字的数字,这极大地提高了可读性。例如:1_000_000(相当于1000000) C ++有类似的方法吗?
编辑:这是关于源代码的问题,而不是I / O.
答案 0 :(得分:10)
C ++本身并不支持这种做法。但是,这里有两个解决方法:
Using user-defined literals in C++11;这将允许您编写如下代码:
int x = "1_000_002"_i;
(将其写为constexpr
会比较棘手 - 但绝对有可能。)
Using a straightforward macro,这将允许以下代码:
int x = NUM(1,000,002);
答案 1 :(得分:9)
目前无法做到这一点。但是,有一项建议是引入digit seperators (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
它只是从给定的文字中删除所有逗号并将其转换为整数。
答案 2 :(得分:4)
int main()
{
int x = 1e6;
}
答案 3 :(得分:2)
你总是可以定义一个变量宏,就像N(123,456,678)
一样。不过,它比它的价值更麻烦。特别是,您可能必须为可移植代码计算参数的某些visual c ++特性。
答案 4 :(得分:0)
通过{{1}使用适当的区域设置方面(在本例中为num_put){I}来完成I / O流的完全可能。
(假设您正在谈论I / O.如果您正在谈论源本身,那么从C ++ 11开始就不可能。)