繁体   English   中英

C++ 通过引用传递而不是通过值/指针传递

[英]C++ Pass by reference as opposed to pass by value/pointer

由于引用传递不是值传递,所以前者不应该涉及堆栈,它应该更快。 这也意味着传递引用应该在编译时解决,而不是运行时,所以像下面这样的代码应该是非法的(加上引用必须在声明时初始化的要求):

void foo(int &i)
{
  cout << i;
}

main()
{
  int i;
  int array[5];
  cout << "Make sure you enter something between 0 and 4:";
  cin >> i;
  foo(array[i]);
}

如果上面的代码编译/工作,我们可以确定引用是作为一个指针实现的,它变成了按值传递? 请评论。 是否有编译器设置不让上述代码编译,即保留引用真实别名?

编辑:问这个问题的更好方法是:通过引用传递比通过指针传递更快吗? 如果是,如何?

Edit2:使用引用参数时是否总是涉及堆栈?

Edit3:我认为引用只是一个指针,除非它可以被编译器“远离”优化,否则我的结论是否正确? 有人可以用一个例子简单地解释一下“优化掉”是什么意思吗?

Edit4:我得出的结论是引用只是“语法糖”。 没有加速。 如果有人可以用一个例子简单地解释“优化掉”是什么意思?

假设main中的i在 [0, 4] 范围内,则fooi指的是array的元素之一。

引用引用未初始化的变量是合法的。

这是不合法的使用它。 所以语句cout << i; 未定义。

这是否在编译时解决取决于编译器:标准没有强制要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM