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
在这种情况下,&手段参考 - 不是地址.