如何制作原始类型c ++的副本?

时间:2013-04-02 10:09:55

标签: c++ visual-c++ g++

我想复制一个常量基本类型的值,并分配给一个引用。我希望这样做,尽管它在堆中是可行的吗?

做一些这样的事情:

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 ++兼容)

2 个答案:

答案 0 :(得分:1)

以下是:

float first = 3.14159265358979324f;
float second = first;

答案 1 :(得分:1)

您的代码段都不正确。

float(NaN)float(F)是临时对象。您将它们绑定到引用数据成员_f,但这不会延长它们的生命周期。因此,当您使用参考_f时,它将悬空。

如果您想要复制float,请使用float数据成员,而不是float&。如果您需要引用数据成员,则必须确保它引用了在使用引用时仍然存在的内容。

  

如果代码没有编译,那是因为它是来自真实代码的伪代码

处理此问题的正确方法是编写一个简短,完整的程序,包括您要询问的代码,检查它是否已编译,然后询问有关完整程序的问题。您发布的代码至少存在两个编译问题。你的真实代码(如果用g ++编译)不可能像你在示例代码中那样初始化引用。