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 first = 3.14159265358979324f;
float second = first;
于 2013-04-02T10:11:53.020 回答
1

您的代码片段都不正确。

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

如果要获取 a 的副本float,请使用float数据成员,而不是float&. 如果你想要一个引用数据成员,你必须确保它引用的东西在使用引用时仍然存在。

如果代码无法编译,那是因为是真实代码的伪代码

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

于 2013-04-02T10:38:06.363 回答