如何定义一个可以不带联合就可以容纳uintptr_t或uint32_t的类型?

问题描述 投票:0回答:2

如何定义类型uintptr,以便它至少可以容纳uint32_tuintptr_t,而无需使用并集?

在预处理器中允许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
c++ c-preprocessor typedef
2个回答
0
投票

顾名思义,假定为x86_64系统,uintptr_t将至少已包含uint32_t。在x86上,它将是uint32_t,而在x64上,它将是uint64_t。


0
投票

不需要预处理器获得这样的别名。在C ++ 17中,它很简单:

template<typename A, typename B>
auto larger_type() {
    if constexpr (sizeof(A) > sizeof(B))
      return A{};
    else
      return B{};
}

using uintptr = decltype(larger_type<uint32_t, uintptr_t>());
© www.soinside.com 2019 - 2024. All rights reserved.