C ++ 11用户
这个问题在这里已经有了答案:
用户定义的文字在C ++ 11版本的语言中是不可能的,因为它现在就是这样。 用户定义的文字支持参数的有限格式,似乎不支持右侧参数,链接,此外还存在将0开头的数字表示为实际数字的问题。 所以这是一个不行。
您目前的方法将_000等定义为独立文字,因此编译器只能与他们一起工作,而不能与其他工作。 它不像_
是运营商和000
是一些参数,您可以用遗憾的是工作。
您可以使用字母后缀代替。
long long constexpr operator"" K (long double n) {
return n * 1000;
}
long long constexpr operator"" M (long double n) {
return n * 1000000;
}
long long constexpr operator"" G (long double n) {
return n * 1000000000;
}
接着:
0.05M == 50000;
123.232K == 123232
1.000000001G == 1000000001
当然,最后一种情况会使目标失败,因为再一次你有很多零点没有视觉指示......所以你可以去做类似的事情:
1.G + 1 == 1000000001 // much clearer 1 billion + 1
这使得它有点难看,因为文字需要一个实数,并且不能用一个整数,除非你定义一个额外的文字只用于整数。 然后你可以简单地使用1G。
此外,这种方法可能会产生编译器警告,显然c ++组想要保留所有后面没有用于“将来使用”的下划线的后缀。 如果您希望警告消失,请改用_K _M和_G。
编辑:我删除了初始化器列表解决方案,因为它会产生像010这样的数字的无效结果,它将作为八进制处理并将计算搞乱。
链接地址: http://www.djcxy.com/p/73669.html上一篇: C++11 user