【发布时间】:2021-06-15 10:04:10
【问题描述】:
创建对位域值的引用 const 是否安全? 看看下面的例子
typedef struct
{
int a:1;
}x_t;
int main() {
x_t x;
bool const & x2 = x.a;
}
【问题讨论】:
-
它是安全,但不是很有用。这只是出于好奇,还是您希望通过这样做来取得特别的成就?
标签: c++ bit-fields
创建对位域值的引用 const 是否安全? 看看下面的例子
typedef struct
{
int a:1;
}x_t;
int main() {
x_t x;
bool const & x2 = x.a;
}
【问题讨论】:
标签: c++ bit-fields
创建对位域值的引用 const 是否安全?
是的,就像你写例子一样:
bool const& x3 = 42;
在您的代码中,采用x.a 的值并创建一个bool 类型的临时对象,并为其分配x.a 的值,然后将引用绑定到该临时对象。所以这就像创建一个x.a 的当前值的“视图”(它是const)作为bool 类型。在过于简单化的情况下,假设它的工作方式就像这样:
const bool _some_hidden_temporary = x.a;
bool const& x2 = _some_hidden_temporary;
【讨论】:
你会得到一个const& 到一个临时的。如果您切换x_t 中的位,它将不会通过const& (x2) 反映出来。
临时的生命周期是x2的生命周期(main的结束)。
如果不实现某种代理类,就不能引用单个位(在位域中)。
【讨论】: