什么是C++中Reference和Pointer返回类型之间的区别

wfo*_*ter 15 c++ pointers coding-style reference address-operator

如果我要在C++中创建一个简单的对象,返回成员的地址与返回指针之间的区别是什么.据我所知,C++没有自动垃圾收集,因此它不会保留引用计数.那么为什么会有人这样做呢:

class CRectangle {
public:
    string& getName( );
    int&    getWidth( );
    int&    getHeight( );
private:
    string  name;
    int     height;
    int     width;
};
Run Code Online (Sandbox Code Playgroud)

而不是这样:

class CRectangle {
public:
    string* getName( );
    int*    getWidth( );
    int*    getHeight( );
private:
    string  name;
    int     height;
    int     width;
};
Run Code Online (Sandbox Code Playgroud)

我意识到这些将允许您访问成员数据,但我并不关心这个简单示例中的正确封装.那么差异是什么?加速?可读性?样式?

jal*_*alf 22

&(在这方面)并不意味着"地址".

声明为的函数string& getName( );返回引用,而不是指针.引用本质上是另一个对象的别名.因此,在这种情况下,它不会返回对象名称的副本或指向名称的指针,而是返回对名称本身的引用.因此,对返回对象的任何更改都将直接应用于对象的名称.

您可以通过返回指针来实现相同的目标,但是存在两个显着差异:

  • 指针需要特殊的语法才能访问(*->运算符),而引用的使用方式与使用对象本身完全相同.
  • 指针可以null,参考不能.因此,无论何时使用指针,您都会向读者发出"此值可能null"的信号.


Eri*_*rik 10

在这种情况下,&手段参考 - 不是地址.

  • 指针可以是0 - 在格式良好的程序中,引用不能.
  • 返回指针时,所有权可能会更加明确.
  • 可读性是主观的 - 我会说尽可能使用参考.
  • 为了提高效率,没有真正的区别.