最好用一个例子解释:
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"参考变量。现在我只是使用一个指针并一直取消引用它,有没有办法为我的班级带来一些额外的便利?
答案 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
。