由于引用传递不是按值传递的,因此堆栈不应该包含在前者中,它应该更快。这也意味着应该在编译时而不是运行时解析引用传递,因此像下面这样的代码应该是非法的(加上要求引用必须在声明时初始化):
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:我已经得出结论,参考文献只是“合成糖”。没有加速。如果有人能用一个例子简单地用一个例子来解释“优化掉”是什么意思?
答案 0 :(得分:0)
假设i
中的main
位于[0,4]范围内,i
中的foo
指的是array
中的一个元素}。
引用未初始化的变量是合法的。
使用它是不合法的。所以声明cout << i;
未定义。
是否在编译时解决了这个问题取决于编译器:标准不强制要求。