【发布时间】:2018-03-20 04:42:29
【问题描述】:
我知道 C++11 提供了 alignof、alignas 和 align,但在这种情况下,我想检查一个已经分配的输入缓冲区。
我也知道 C 提供了 uintptr_t 来精确匹配指针类型以转换为整数(然后检查对齐很容易),但这种数据类型是 not guaranteed to be there in C++/C++11。
对于 C 的问题已回答 here。在这种情况下,似乎可以转换为任何整数,但在 C++ 中,我收到“丢失精度”警告。
所以,现在我查看Converting a pointer into an integer,但在那里我发现uintptr_t 的大量使用,但不能保证在那里。
那么,在 C++/C++11 中检查输入指针是否对齐的最佳方法是什么?
(注意:经过所有这些研究和推理,我想出了一个解决方案,但我期待其他建议!)
【问题讨论】:
-
从 64 位指针转换为 int 时会丢失精度。使用 long long int。
-
@YvesDaoust:在 cmets 部分写答案(或部分答案)时,同行评审功能丢失。使用答案部分,或将答案留给其他人。不,不要只是随机猜测类型宽度 - 使用正确的类型来完成工作.....看到了吗?我不能拒绝您的评论以表示它对其他访问者不正确:(。