C++ C++;按引用传递,而不是按值/指针传递

C++ C++;按引用传递,而不是按值/指针传递,c++,C++,由于pass-by引用不是pass-by-value,因此堆栈不应该包含在前者中,并且应该更快。这也意味着应在编译时而不是运行时解析传递引用,因此以下代码应为非法代码(加上声明引用时必须初始化引用的要求): void foo(int&i) { 我不能; foo(数组[i]); } 如果上面的代码编译/工作,我们可以确定引用是作为指针实现的,而指针变成了传递值?请评论。是否有编译器设置不允许上述代码编译,即保持引用为真实别名 编辑:问这个问题的更好方法是:引用传递比指针传递快吗?如果是,如何进行

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

void foo(int&i)
{
我不能;
foo(数组[i]);
}
如果上面的代码编译/工作,我们可以确定引用是作为指针实现的,而指针变成了传递值?请评论。是否有编译器设置不允许上述代码编译,即保持引用为真实别名

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

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

Edit3:我的结论是引用只是一个指针,除非编译器可以“远离”优化它,这对吗?有人能用一个简单的例子解释一下“优化”是什么意思吗


编辑4:我已经得出结论,参考文献只是“合成糖”。没有加速。如果有人可以用一个例子简单地解释“优化掉”是什么意思?

假设
main
中的
i
在[0,4]范围内,那么
foo
中的
i
指的是
数组的一个元素

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


使用它是不合法的。因此,语句
不能将foo(i)理解为foo(array[i]),为什么不编辑您的问题来解决它的问题呢?关于您的问题,可以使用指针实现引用,因此编译器仍然需要复制指针,因此对于小型本机类型,使用引用不会加快速度。另一方面,编译器可能会优化您的简单代码。此外,如果不修改函数内的值,则考虑将引用传递给常量(例如,在您的情况下,例如“代码> const int和i>代码”),因为这样可以使编译器进一步优化,并使用该函数向程序员添加一些语义信息。未指定引用是如何实现的,是的,它们通常作为指针实现。我真的不明白你是从哪里想到这个from的-引用应该在编译时解决。在运行时形成对对象的引用是完全合法的。问这个问题的另一种方法是:通过引用传递比通过指针传递快吗?如果是,怎么做?嗨,芭丝谢芭,我的问题是:引用传递比指针传递快吗?如果是,如何进行?如果没有,为什么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]);
}