gpt4 book ai didi

c++ - 如何定义一个可以保存 uintptr_t 或 uint32_t 而无需 union 的类型?

转载 作者:行者123 更新时间:2023-12-02 00:49:27 27 4
gpt4 key购买 nike

如何定义一个类型 uintptr,使其至少可以容纳一个 uint32_t 和一个 uintptr_t,而不需要求助于 union ?

如果预处理器中允许 sizeof(),这将实现我想要的:

#include <inttypes.h>
#if sizeof(uint32_t) > sizeof(uintptr_t) // unlikely, but the standard allows it
typedef uint32_t uintptr;
#else
typedef uintptr_t uintptr;
#endif

如果不等于uintptr_tuint32_t很可能会更小,但标准不保证。也就是说,这样的平台非常罕见,所以现在我通过以下方法解决了这个问题:

static_assert(sizeof(uint32_t) <= sizeof(uintptr_t), "Yikes");
typedef uintptr_t uintptr;

最佳答案

预处理器不需要获取这样的别名。这是标准库类型特征的一个简单用例

using uintptr = std::conditional_t<(sizeof(uint32_t) > sizeof(uintptr_t)),
uint32_t, uintptr_t>;

关于c++ - 如何定义一个可以保存 uintptr_t 或 uint32_t 而无需 union 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58352351/

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