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

C++ functions: invalid initialization of non-const reference of type

本文关键字:引用 初始化 无效 常量 非常 类型 C++ 函数      更新时间:2023-10-16

我将名为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&"的非常量引用的无效初始化吗?

所以我知道我不能选这个。那么,如何解决这个问题呢?我知道这是

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

还有更高效的吗?

其中T不是引用类型的static_cast<T>(x)的结果是给定类型的右值。不能将非常量引用绑定到右值,从而导致错误。

您可以执行reinterpret_cast<uf&>以使编译器满意,但您可能试图以错误的方式执行某些操作,并且很可能会在某个地方遇到该段代码中未定义的行为。

有趣的问题是,你认为选工会类型对你有什么帮助?(也就是说,您试图解决的原始问题是什么)