以后可以初始化引用变量吗?

时间:2014-07-07 16:21:14

标签: c++

最好用一个例子解释:

Class banana {
    int &yumminess;
    banana::banana() {
        //load up a memory mapped file, create a view
        //the yumminess value is the first thing in the view so
        yumminess = *((int*)view);
    }
}

但是这并不起作用:/当我回想起这种情况时,我无法知道观点会在哪里发生。" yumminess"参考变量。现在我只是使用一个指针并一直取消引用它,有没有办法为我的班级带来一些额外的便利?

2 个答案:

答案 0 :(得分:6)

简而言之:不,这是故意不可能的。

三思而后行:未初始化的引用之类的东西确实不存在;这根本没有意义。
因此,它们需要在构造封闭类时或在静态初始化时设置。

你需要使用指针来解决这种情况。


除了注意

 yumminess = (int*)view;

无论如何都会错误地投射(指针)。


  

“现在我只是使用一个指针并一直取消引用它......”

这也很容易克服编写适当的成员函数来访问引用。

int* yumminess;

// ...

int& yumminessRef() {
    if(!yumminess) { 
        throw some_appropriate_exception("`yumminess` not initialized properly.");
    }
    return *yumminess;
}

答案 1 :(得分:2)

不,不是直接。

如果您认为指针不方便,请查看std::optional