传递引用的指针/传递引用的引用

时间:2011-10-01 23:21:28

标签: c++ pointers reference

当我将指针传递给变量的引用时,是否得到一个通常的指针,或者我得到一个指向引用的指针?当我传递对引用的引用时,我得到了什么? 我在一个类中使用standard library的堆栈实现,我希望有一些包装器方法来防止非法访问堆栈,但我得到了奇怪的段错误,我缩小到我的getter-methods考虑到叠加。

这些方法是否应该返回存储在堆栈中的原始变量的干净引用/指针?

int& zwei() { return stack.top() };

int* eins() { return &stack.top() };

1 个答案:

答案 0 :(得分:3)

没有“指向引用的指针”这样的东西。引用是别名,因此获取其中任何一个的地址将给出指向同一对象的指针:

int a;
int & b = a;

assert(&a == &b);

如果stack对象在函数返回范围内仍然存活,则函数都返回有效结果。

std::stack<int> s;

int & foo() { return s.top(); }  // OK, maybe
int * goo() { return &s.top(); } // ditto

int & boo() { std::stack<int> b; return b.top(); } // No! Dangling reference!

您还应该检查堆栈是否为空,在这种情况下top()无效。

(我也应该反对使用与类型相同的名称调用变量,即使类型的名称是std::stack。)