首页 > 解决方案 > 在指针地址中隐藏数据有什么好处

问题描述

我正在跟踪llvm中错误类的源代码。 http://llvm.org/doxygen/Support_2Error_8h_source.html

从概念上讲,该类应该包含两个重要的数据成员,一个指向 ErrorInfoBase 的指针(Payload)和一个指示是否检查了错误的布尔标志。

但是,布尔标志的getter和setter的实际实现将标志隐藏在指针Payload中。

bool getChecked() const {
    return (reinterpret_cast<uintptr_t>(Payload) & 0x1) == 0;
}
void setChecked(bool V) {
 Payload = reinterpret_cast<ErrorInfoBase*>(
             (reinterpret_cast<uintptr_t>(Payload) &
               ~static_cast<uintptr_t>(0x1)) |
               (V ? 0 : 1));
}

我想知道为什么不只使用布尔数据成员,并从中设置和获取标志。
将布尔标志存储在指针地址中有什么好处?

标签: c++

解决方案


推荐阅读