我想复制一个常量基本类型的值,并分配给一个引用。我希望这样做,尽管它在堆中是可行的吗?
做一些这样的事情:
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 ++兼容)
答案 0 :(得分:1)
以下是:
float first = 3.14159265358979324f;
float second = first;
答案 1 :(得分:1)
您的代码段都不正确。
float(NaN)
和float(F)
是临时对象。您将它们绑定到引用数据成员_f
,但这不会延长它们的生命周期。因此,当您使用参考_f
时,它将悬空。
如果您想要复制float
,请使用float
数据成员,而不是float&
。如果您需要引用数据成员,则必须确保它引用了在使用引用时仍然存在的内容。
如果代码没有编译,那是因为它是来自真实代码的伪代码
处理此问题的正确方法是编写一个简短,完整的程序,包括您要询问的代码,检查它是否已编译,然后询问有关完整程序的问题。您发布的代码至少存在两个编译问题。你的真实代码(如果用g ++编译)不可能像你在示例代码中那样初始化引用。