通过引用传递是一个传递为指针的特殊情况?

时间:2013-04-30 20:57:28

标签: c++ pointers parameters reference conceptual

我完全不明白在C ++中通过引用传递。我已经阅读了以下相关问题。

但即使我理解它与指针不同,我也不完全理解C ++中的引用概念。它是如何工作的?我似乎引用是一个指针的特殊情况,可能由编译器实现。但它在编程层面上表现不同。这是对的吗?

传递引用的概念是否是将指针传递给该值的特殊情况?很多时候我必须在编程时决定是使用引用还是指针。此外,我想了解基本原则。只复制了内存地址吗?

2 个答案:

答案 0 :(得分:3)

引用是一个具有一些特殊限制的指针。绝不能取消初始化引用。创建引用时,它必须指向某个东西。当想要一个不为NULL的“指针”时,这很有用。

此外,引用不能使其保持的地址发生变化,因此它是一个常量指针。

它有一些很好的语法糖,允许它使用点运算符,使其在从按值代码更改为按引用代码时非常有用。

实际上,在函数中使用引用作为参数或返回值通常表示“通过地址,不能为NULL并且必须是有效对象”。改为使用指针通常表示“可能为NULL,因此必须处理NULL”。通过指针也允许指针算术和操作。

你应该使用的是你最熟悉的,假设你理解两者。我自己更喜欢指针。

编辑: 正如这里的评论所指出的那样,你不能直接获取引用的地址,因为它将返回引用引用的地址。这是另一个不适用于平均指针的限制。

答案 1 :(得分:0)

是的,它与指针基本相同,但更好更安全的版本,因为指针地址无法更改或设置为null。我认为这主要是为了拥有良好的功能接口,而不需要接口的用户担心指针 - 即功能保持简单但对象不被复制,纯粹是它的地址。类复制构造函数是引用至关重要的主要示例。