[英]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] 范围内,则foo
的i
指的是array
的元素之一。
引用引用未初始化的变量是合法的。
这是不合法的使用它。 所以语句cout << i;
未定义。
这是否在编译时解决取决于编译器:标准没有强制要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.