如何输入 int64_t/uint64_t 常量?

2021-12-31 00:00:00 compiler-errors g++ constants c++ int64

我想要做的是定义一个等于 2^30 的常量(我可能会将其更改为 2^34 之类的值,因此我更喜欢为它设置一个大于 32 位的房间).

What I'm trying to do is to define a constant equal to 2^30 (I may change it to something like 2^34, so I prefer to have a room larger than 32 bits for it).

为什么下面的最小(?)示例无法编译?

Why the following minimal(?) example doesn't compile?

#include <stdint.h>
// test.cpp:4:33: error: expected primary-expression before numeric constant
// test.cpp:4:33: error: expected ')' before numeric constant
const uint64_t test = (uint64_t 1) << 30;
//const uint64_t test1 = (uint64_t(1)) << 30;// this one magically compiles! why?

int main() { return 0; }

推荐答案

(uint64_t 1) 是无效的语法.转换时,您可以使用 uint64_t(1)(uint64_t) 1.注释掉的示例之所以有效,是因为它遵循正确的强制转换语法,就像这样:

(uint64_t 1) is not valid syntax. When casting, you can either use uint64_t(1) or (uint64_t) 1. The commented out example works because it follows the proper syntax for casting, as would:

const uint64_t test = ((uint64_t)1) << 30;

虽然这直接回答了问题,但请参阅 Shafik Yaghmour 的回答,了解如何正确定义积分常数具体尺寸.

While this directly answers the question, see the answer by Shafik Yaghmour on how to properly define an integral constant with specific size.

相关文章