将数据隐藏在指针地址中有什么好处

时间:2018-08-09 06:35:41

标签: c++

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

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

但是,布尔标志的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));
}

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

0 个答案:

没有答案