2011-10-12 84 views
0

我抓到,我使用的引用不明白他们到底是如何工作的任何较大的差异(这就是为什么我这样经常使用他们不要)。C++:在_implementation_参考和指针

指针似乎被简单地实现莫名其妙地想:一个简单的WORD变量与其他变量的地址。当我们将其作为参数传递给函数时,我们将其复制。

而当我们通过引用作为参数,会发生什么?旧的方式?

+0

你的问题似乎混淆* language *和* implementation *。该语言没有指定如何实施参考。 –

+0

你是对的。只有“这种代码应该做什么”的标准,对吗?那么,你的意思是每个编译器都以不同的方式实现它? –

+1

没错。如果某些引用可以直接解析,那么它们可能根本不会表现出来,其他(如通过脚趾外部函数的引用)可能会被大多数编译器实现为指针,但是语言中没有任何要求。 –

回答

2

两个没有共同点,就像你会觉得,真的。

参考存在于抽象的编译器中的一个较高的水平。它根本不需要生成任何代码。它本质上是一个对象的别名,所以无论何时使用它,编译器都会将其视为对被引用对象的使用。当然,有时编译器会选择通过生成一个可以根据需要传递的指针值来表示使用引用的代码,但引用实际上并不与特定表示形式绑定。

指针更接近金属。它是一个存储地址的变量。

+0

+1不同层次的抽象是什么使整体差异 –

2

关于它们是如何实现的细节,这取决于它们所使用的上下文。如果引用仅在范围内有效,编译器可以删除引用(别名)并在需要时使用引用的对象。

如果引用不能被证明不能逃脱当前作用域(就像在一个可以动态分配的类的成员中那样),大多数编译器都会使用一个指针自动解除引用来实现它(并提供剩余的保证可用于引用而不是纯指针)。