Mas*_*Man 3 c++ static-cast int64
将64位常量指定为
int64_t foo = 0x1234LL;
Run Code Online (Sandbox Code Playgroud)
是不便携的,因为long long 不一定int64_t.这篇文章哪个初始化程序适合int64_t?讨论了使用INT64_C()宏<stdint.h>,但是也不可能使用static_castas
int64_t foo = static_cast<int64_t>(0x1234);
Run Code Online (Sandbox Code Playgroud)
?
我应该选择哪一个,为什么,或者两者都运作良好?
我在互联网上搜索了SO,但没有找到任何static_cast选项被探索的地方.我也做过测试,sizeof()以确认它在简单的情况下工作.
实际上,long longC实现限制标头保证至少为64位<climits>.类型对象的最小值和最大值的最小限制long long如下:
LLONG_MIN -9223372036854775807 // ?(2^63 ? 1)
LLONG_MAX +9223372036854775807 // 2^63 ? 1
Run Code Online (Sandbox Code Playgroud)
这对应于带符号的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
... | ... | ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1797 次 |
| 最近记录: |