gpt4 book ai didi

c++ - 用于测试 uint64_t 和 unsigned long long int 之间差异的编译器宏

转载 作者:太空狗 更新时间:2023-10-29 21:42:23 24 4
gpt4 key购买 nike

我的 C++11 代码无法编译,因为重载函数被重新定义为与参数相同的类型:

char const* foo(uint64_t) { return "%" PRIu64; }
char const* foo(unsigned long long int) { return "%llu"; }

有没有我可以添加的编译器宏来检查这两个原语之间的相等性,然后在编译之前如果第二个原语相等则切除第二个?

还有其他函数可以返回其他类型的字符指针。例如,添加这个不会给我带来任何麻烦,即使 signedunsigned long long int 使用相同的字节数:

char const* foo(long long int) { return "%lld"; }

所以检查一个类型使用了多少内存似乎是不够的。还有哪些其他方法?

最佳答案

您可以使用 climitscstdint 中的定义检查这些类型的最大值:

#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

不过,使用模板创建系统可能是更好的长期解决方案。

关于c++ - 用于测试 uint64_t 和 unsigned long long int 之间差异的编译器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26500614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com