首页 > 解决方案 > 返回 const 对象引用(getter)和仅返回字符串有什么区别?

问题描述

我正在浏览 c++ 网站教程,作为对我本学期(初学者)上的大学课程的一个很好的补充。在学习复制构造函数和析构函数时,我遇到了这段代码:

// destructors
#include <iostream>
#include <string>
using namespace std;

class Example4 {
    string* ptr;
  public:
    // constructors:
    Example4() : ptr(new string) {}
    Example4 (const string& str) : ptr(new string(str)) {}
    // destructor:
    ~Example4 () {delete ptr;}
    // access content:
    const string& content() const {return *ptr;}
};

int main () {
  Example4 foo;
  Example4 bar ("Example");

  cout << "bar's content: " << bar.content() << '\n';
  return 0;
}

现在,我理解了析构函数部分,但字符串成员的 getter 让我感到困惑。为什么要返回对对象(在这种情况下为字符串)的引用(别名)?

// access content:
const string& content() const {return *ptr;}

那和只返回字符串有什么区别?

string content() const {
    return *ptr;
}

返回一个 const 别名更有效吗?您是只返回字符串的地址,还是返回字符串本身?仅返回字符串时,您是否返回整个字符串呢?谢谢。

标签: c++c++11constantsreturn-valuereturn-type

解决方案


返回字符串是不可取的,原因有两个:

  • 这意味着执行了不必要的字符串副本,这对性能不利
  • 这也意味着有人可能会尝试修改返回的字符串,认为他们修改了类的实际成员 -const引用不允许这样做,并触发编译错误。

推荐阅读