【问题标题】:C++ functions: invalid initialization of non-const reference of type [duplicate]C ++函数:类型的非常量引用的无效初始化[重复]
【发布时间】:2013-08-22 16:46:53
【问题描述】:

我有一个名为 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”类型的临时错误中得到“invalid initialization of non-const reference of type 'uf&'”。

所以我知道我不能施放这个。那么有人将如何解决这个问题呢? 我知道这行得通

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

还有什么更高效的吗?

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    您可以使用reinterpret_cast&lt;uf&amp;&gt; 使编译器满意,但您可能试图以错误的方式做某事,并且您可能会在某处的那段代码中遇到未定义的行为。

    有趣的问题是,您认为强制转换为联合类型对您有何帮助? (也就是说,您要解决的原始问题是什么)

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 1970-01-01
      • 2013-01-07
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多