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

时间:2015-06-22 07:05:20

标签: c++

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

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:我已经得出结论,参考文献只是“合成糖”。没有加速。如果有人能用一个例子简单地用一个例子来解释“优化掉”是什么意思?

1 个答案:

答案 0 :(得分:0)

假设i中的main位于[0,4]范围内,i中的foo指的是array中的一个元素}。

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

使用它是不合法的。所以声明cout << i;未定义。

是否在编译时解决了这个问题取决于编译器:标准不强制要求。