gpt4 book ai didi

c++ - 我应该使用 static_cast 还是 INT64_C 来可移植地分配 64 位常量?

转载 作者:太空狗 更新时间:2023-10-29 20:27:56 25 4
gpt4 key购买 nike

分配一个 64 位常量作为

int64_t foo = 0x1234LL;

不可移植,因为long long不一定是 int64_t .本帖Which initializer is appropriate for an int64_t?讨论 INT64_C() 的使用来自 <stdint.h> 的宏, 但不是也可以使用 static_cast作为

int64_t foo = static_cast<int64_t>(0x1234);

?

我应该更喜欢哪一个,为什么,或者它们都工作得很好?

我在互联网和 SO 上搜索过,但没有找到 static_cast 的任何地方。选项进行了探讨。我还使用 sizeof() 进行了测试确认它在简单的情况下有效。

最佳答案

实际上,long long C 实现限制 header <climits> 保证至少为 64 位.类型对象的最小值和最大值的最小限制 long long给出为:

LLONG_MIN   -9223372036854775807 // −(2^63 − 1)
LLONG_MAX +9223372036854775807 // 2^63 − 1

这对应于一个带符号的 64 位整数。如果没有至少 64 个信息位,您将无法存储这样一个范围的值。

所以继续使用0x1234LL .事实上,您也可以不使用后缀,因为将选择以下适合该值的类型中的第一个:

Suffix | Decimal constants | Octal or hexadecimal constant
-------|-------------------|------------------------------
none | int | int
| long int | unsigned int
| long long int | long int
| | unsigned long int
| | long long int
| | unsigned long long int
... | ... | ...

关于c++ - 我应该使用 static_cast 还是 INT64_C 来可移植地分配 64 位常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14798739/

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