0

定数プリミティブ型の値をコピーして参照に代入したいと考えています。ヒープに入れなくてもそうしたいのですが、それは可能ですか?

このようなものを作ります:

const unsigned long rawnan[2]={0xffffffff, 0x7fffffff};
const double NaN = *( double* )rawnan;
    Class{
        float &_f;
        inline Class( ):_f(float(NaN)){
        }
    }

そして、いつか知りたい:

Class{
    float &_f;
    inline Class( float F):_f(float(F)){
    }
}

変数 F のコピーを実際に作成するかどうか (F を直接参照できることはわかっていますが、コンストラクターの最後でスコープが終了すると思うので、その値のコピーを作成する必要があります。)

(コードがコンパイルされない場合、それは実際のコードからの疑似コードであるためです。基本的な質問が重要です。理解できることを願っています)

(私は NaN の定義を行います。なぜなら、これが私が知っている最良の方法であり、VC++ および G++ と互換性があるためです)

4

2 に答える 2

1

どちらのコード スニペットも正しくありません。

float(NaN)およびfloat(F)一時オブジェクトです。それらを参照データ member にバインドします_fが、これによって有効期間が延長されることはありません。したがって、参照を使用するように_fなるまでに、参照はぶら下がっています。

のコピーを取得する場合は、 ではなくデータ メンバーをfloat使用します。参照データ メンバーが必要な場合は、参照が使用されたときにまだ存在する何かを参照していることを確認する必要があります。floatfloat&

コードがコンパイルされない場合、それは実際のコードからの擬似コードであるためです

これに対処する正しい方法は、質問したいコードを含む短い完全なプログラムを作成し、それがコンパイルされることを確認してから、完全なプログラムについて質問することです。あなたが投稿したコードには、少なくとも 2 つのコンパイルの問題があります。実際のコード (g++ でコンパイルされている場合) は、サンプル コードで行った方法で参照を初期化できない可能性があります。

于 2013-04-02T10:38:06.363 に答える