【问题标题】:Reference const to bitfield value将 const 引用到位域值
【发布时间】: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


【解决方案1】:

创建对位域值的引用 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;

【讨论】:

    【解决方案2】:

    你会得到一个const& 到一个临时的。如果您切换x_t 中的位,它将不会通过const& (x2) 反映出来。

    临时的生命周期是x2的生命周期(main的结束)。

    如果不实现某种代理类,就不能引用单个位(在位域中)。

    【讨论】:

    • 这个的生命周期到哪一点?
    • @getsoubl 我将其添加到答案中
    猜你喜欢
    • 2017-03-12
    • 1970-01-01
    • 2017-04-13
    • 2018-10-11
    • 2014-09-09
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多