【发布时间】:2021-04-30 11:54:42
【问题描述】:
既然引用变量是另一个变量的别名,我们怎么可能在另一个函数中使用引用。例如:
void func(int& a){
a *= 4;
return;
}
int main(){
int n = 3;
func(n);
std::cout << n << std::endl; //displays 12
}
这里,变量 'n' 由 main 堆栈框架界定(对吗?)。那么,如何在函数func中使用(因为它的作用域内不存在)?
'n'是否会因为引用传递给另一个函数而被存储在堆中?
【问题讨论】:
-
您可以从
func访问n,因为您明确提供了func的引用。你能分享一下为什么你认为这不应该起作用吗? -
我不确定我是否理解。
a是一个引用,或者是传递给函数的事物的别名。由于您将n传递给函数,因此a成为n的别名。有什么让你感到困惑的? -
引用有时与别名相似,但它们实际上不仅仅是简单的别名。如您的代码所示。在您的示例中,
func中的引用变量a更像是一个指针,具有自动取消引用功能,并且在调用中编译器生成代码以将指针从main传递给n。 -
n在main的末尾超出范围,因此在调用func时它仍然是“活动的” -
@Someprogrammerdude 该标准从字面上说明引用是别名。引用行为类似于指针的事实是编译器的实现细节。使用实际指针是编译器实现引用的最常见和最简单的方法,但这不是必需的。
标签: c++ function stack pass-by-reference heap-memory