C ++ 11用户

这个问题在这里已经有了答案:

  • 在源代码中代表大数字以提高可读性? 5个答案

  • 用户定义的文字在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

    下一篇: Remove Notification when addAction called?