c++ - C++中引用和指针返回类型之间的区别是什么

标签 c++ pointers reference coding-style address-operator

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

class CRectangle {
public:
    string& getName( );
    int&    getWidth( );
    int&    getHeight( );
private:
    string  name;
    int     height;
    int     width;
};

而不是这样:

class CRectangle {
public:
    string* getName( );
    int*    getWidth( );
    int*    getHeight( );
private:
    string  name;
    int     height;
    int     width;
};

我知道这些将允许您访问成员数据,但我并不关心这个简单示例中的正确封装。那么有什么区别呢?加速?可读性?风格?

最佳答案

&(在此上下文中)并不表示“地址”。

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

你可以通过返回一个指针来达到同样的效果,但是会有两个显着的区别:

  • 指针需要特殊的语法才能访问(*-> 运算符),而引用的使用方式与您使用对象本身的方式完全相同。
  • 指针可以为null,引用不能。因此,任何时候使用指针,您都是在向代码的读者发出信号,“这个值可能是 null

关于c++ - C++中引用和指针返回类型之间的区别是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5541952/

相关文章:

c++ - 如何以编程方式区分 Windows 7 中的硬链接(hard link)和真实文件?

c++ - 智能指针与哑指针 : polymorphism behavior oddity

c - 我想使用指针

c++ - 作为模板参数的指针 vector

c++ - 对指针和 C++ 多态性的引用

c++ - "a struct has public inheritance by default"

c++ - 如何禁用客户端 GRPC 服务器证书主机名验证?

c++ - 具有成员函数的实例化对象,在将其成员函数传递给新线程时表现为未实例化

java - 如何编写一个Map的set方法并将另一个Map作为值?

C# 从另一个类访问字典不起作用