编译宏以测试uint64_t和无符号长整型之间的差异
Compiler macro to test difference between uint64_t and unsigned long long int
我有C++11代码无法编译,因为重载函数被重新定义为与参数相同的类型:
char const* foo(uint64_t) { return "%" PRIu64; }
char const* foo(unsigned long long int) { return "%llu"; }
有没有一个编译器宏,我可以添加它来检查这两个基元之间的相等性,然后在编译前删除第二个基元(如果相等)?
还有其他函数返回其他类型的字符指针。例如,添加它不会给我带来任何麻烦,即使signed
和unsigned long long int
使用相同数量的字节:
char const* foo(long long int) { return "%lld"; }
因此,检查一个类型使用了多少内存似乎是不够的。其他方法是什么?
您可以使用climits
和cstdint
:中的定义来检查这些类型的最大值
#include <climits>
#include <cstdint>
char const* foo(uint64_t) { return "%" PRIu64; }
//ULLONG_MAX defined in climits, UINT64_MAX in cstdint
#if ULLONG_MAX != UINT64_MAX
char const* foo(unsigned long long int) { return "%llu"; }
#endif
然而,使用模板创建一个系统可能是一个更好的长期解决方案。
相关文章:
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 如何以优雅高效的方式将无符号/有符号整数/长整型转换为 C 字符串?
- 将 BYTE 数组转换为无符号长整型
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- gdb ptype 打印整数后缀以指示它是有符号的、无符号的、无符号的长整型等
- 模板参数可以既是 int 又可以是无符号长整型吗?
- 用有符号长整型结果减去无符号长整型
- iOS - 隐式转换将整数精度"size_t"(也称为"无符号长整型")丢失为&
- 将字符串存储在无符号长整型的向量中
- 如果我尝试在 c++ 中将大于 pow(2,64)-1 的值分配给无符号长整型怎么办?
- C++:将无符号长整型长整型转换为无符号长整型
- 在 CORBA 客户端/服务器应用程序中将无符号的长整型(从 C++)断言为长整型 (Java)
- 无法将DWORD转换为无符号长整型
- 无符号长整型VS无符号长型整型
- 如何将SHA1转换为无符号长整型数组[5]
- 如何将 3 个整数连接成无符号长整型