C++ INT32BE宏到constexpr的这种转换是否正确?

C++ INT32BE宏到constexpr的这种转换是否正确?,c++,constexpr,preprocessor-directive,C++,Constexpr,Preprocessor Directive,我有以下宏,希望将其转换为constexpr,因为这显然是一种更好的方法: #define INT32BE(x) (x[0] << 24 | x[1] << 16 | x[2] << 8 | x[3]) 地址的定义如下: UCHAR Address[4]; 它确实像预期的那样工作,但我不完全确定它应该如何编写 问题: 这个constexpr可以从正确写入的数组中读取32位整数吗?我不能从“语言律师”的角度说话,但您提供的constexpr在以下代码中编译时

我有以下宏,希望将其转换为constexpr,因为这显然是一种更好的方法:

#define INT32BE(x) (x[0] << 24 | x[1] << 16 | x[2] << 8 | x[3])
地址的定义如下:

UCHAR Address[4];
它确实像预期的那样工作,但我不完全确定它应该如何编写

问题:


这个constexpr可以从正确写入的数组中读取32位整数吗?

我不能从“语言律师”的角度说话,但您提供的constexpr在以下代码中编译时没有警告,同时使用MSVC和clang cl:

包括 样板 constexpr自动Int32BET数组[]{
返回数组[0]宏和函数都不能在具有16位整数的平台上正常工作。@SamVarshavchik可能是名称的来源:Int32BE,对我来说,至少表明它用于32位大端整数。@SamVarshavchik是的,当然,你是对的,我会看看是否可以“升级”我的constexpr以检查数组边界。公平的enough,我会坚持下去:
const auto address = Int32BE(data.Address);
UCHAR Address[4];