0

次のように定義された f という共用体があります

union uf {
  unsigned u;
  float f;
}

私には2つの機能があります。

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

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

'uf' 型の一時的なエラーから、'uf&' 型の非 const 参照の無効な初期化が発生する理由を説明してください。

だから私はこれをキャストできないことを理解しています。では、誰かがこの問題をどのように修正できるのでしょうか? 私はこれが機能することを知っています

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

より効率的なものはありますか?

4

1 に答える 1

1

static_cast<T>(x)where Tis not a reference typeの結果は、指定された型の右辺値です。非 const 参照をrvalueにバインドできないため、エラーが発生します。

コンパイラを満足させるために行うこともできreinterpret_cast<uf&>ますが、おそらく間違った方法で何かを行おうとしている可能性があり、そのコードのどこかで未定義の動作に遭遇する可能性があります.

興味深い質問は、共用体型へのキャストがどのように役立つと思いますか? (つまり、解決しようとしている元の問題は何か)

于 2013-08-22T16:57:43.997 に答える