gpt4 book ai didi

c++ - 定义 uint64_t 常量的最佳/正确方法

转载 作者:太空狗 更新时间:2023-10-29 22:56:09 26 4
gpt4 key购买 nike

constexpr auto v = static_cast<std::uint64_t>(1) << 32;并不理想,因为繁琐的语法和语义间接的转换。来自 this线程,我学会了constexpr auto v = UINT64_C(1) << 32;但是,macro 的精确语义是

expands to an integer constant expression having the value specified by its argument and the type uint_least64_t.

因此,它不完全是 uint64_t .我想知道定义 uint64_t 的最佳/正确方法是什么常量。

请注意 unsigned long long不一定映射到 uint64_t .

更新

我不愿意使用函数式/C 风格的转换,因为有些(例如 Google C++ 编码风格)说它来自 C,而现代 C++ 应该避免使用它们。看来我应该对此有自己的看法,而不是盲目跟风。

最佳答案

Therefore, it's not exactly uint64_t. I'm wondering what is the best/proper way to define uint64_t constants.

如果你想绝对确定,你可以写uint64_t(1) (可能是 std:: 合格的)而不是作为 static_cast 的较短替代品.

出于实用目的,UINT64_C虽然很好。实现不需要定义 uint64_t如果他们不提供满足其要求的任何类型。因此定义 UINT64_C 才有意义在 uint_least64_t 方面.

但是在 uint64_t 的实现上确实存在——而且你已经隐含地假设你正在使用这样的实现——uint64_tuint_least64_t必须具有完全相同的范围,是否几乎需要实现者的恶意才能不使它们成为完全相同的类型。

附言由于这是标记语言律师:不能保证 uint64_t(1) << 32仍然有类型 uint64_t .假设地,实现可能提供大于 64 位的 int。类型,在这种情况下 uint64_t将被提升为 int .

关于c++ - 定义 uint64_t 常量的最佳/正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48909995/

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