C++ 用户定义的文字与uint64\t参数组合
我刚刚偶然发现了以下用户定义的文字:C++ 用户定义的文字与uint64\t参数组合,c++,c++14,user-defined-literals,C++,C++14,User Defined Literals,我刚刚偶然发现了以下用户定义的文字: #include <cstdint> constexpr auto operator""_G(uint64_t v) { return v * 1'000'000'000ULL; } 这个定义是通过运行gcc-dM-E一个空文件.c | grep“uuuuint64_uuuuuutype” 当然,将uint64\u t替换为无符号long-long-int可以避免编译错误。但这两种类型在LP64数据模型上是相同的 默认情况下不应该这样吗 默认
#include <cstdint>
constexpr auto operator""_G(uint64_t v) { return v * 1'000'000'000ULL; }
这个定义是通过运行gcc-dM-E一个空文件.c | grep“uuuuint64_uuuuuutype”
当然,将uint64\u t
替换为无符号long-long-int
可以避免编译错误。但这两种类型在LP64数据模型上是相同的
默认情况下不应该这样吗
默认情况下不应该这样吗
没有。该标准要求用户定义的文本类型为无符号long-long-int
。长无符号int不是一回事,它是它自己独特的类型。即使它们具有完全相同的属性,std::is\u same\u v
也为false
如果要将整数作为文本,则必须使用无符号long long int
类型。静态断言(std::is_same_v)代码>触发器。
#define __UINT64_TYPE__ long unsigned int;