C ++函数:类型的非const引用的初始化无效

时间:2013-08-22 16:46:54

标签: c++

我将名为f的联合定义为

union uf {
  unsigned u;
  float f;
}

我有两个功能。

void inner_function(uf& in) {
  //modify in
}

void outer_function(unsigned& val) {
  inner_function(static_cast<uf> (val));
}

有人可以解释一下我为什么会从'uf'类型的临时错误中获得“无效初始化类型'uf&amp; '的非常规引用。

所以我明白我不能投这个。那么有人可以如何解决这个问题呢? 我知道这有效

void outer_function(unsigned& val) {
  uf a; 
  a.u = val;
  inner_function(a);
  val = a.u;
}

什么更有效率?

1 个答案:

答案 0 :(得分:1)

static_cast<T>(x)其中T不是引用类型的结果是给定类型的 rvalue 。您不能将非const引用绑定到 rvalue ,从而错误。

你可以reinterpret_cast<uf&>让编译器开心,但是你可能试图以错误的方式做某事,并且很有可能你会在那段代码中遇到未定义的行为。

有趣的问题是,你怎么认为联盟类型的演员会对你有所帮助? (也就是说,你试图解决的原始问题是什么)