在同一函数中使用指针和引用作为返回类型

时间:2019-04-17 19:00:33

标签: c++

所以我在看一些代码,就碰到了。

class Data{
 private:
  int data;
  Data* next;
 public:
   Data(int d=0): data(d), next(NULL) {}
   void SetData(int d) { data = d;}
   int  GetData() { return data; }
   Data*& GetNext() { return next; }
 }

GetNext()返回类型既是引用又是指针作为返回类型。这是什么意思?

2 个答案:

答案 0 :(得分:4)

X *是指向X的指针。

T &是对T的引用。如果T恰好是指针类型,则它是对指针的引用:X* &是对X*的引用。

因此,Data*&是指向Data的指针的引用。

答案 1 :(得分:2)

GetNext()返回的值是对指向Data的指针的引用。这意味着它的作用就像一个指针,但是如果您更改值,它将更改原始对象。

int main()
{
     Data*   d1 = new Data(1);
     std::cout << d1->GetData() << " : " << d1->GetNext()   // prints null;
               << "\n";

     d1->getNext() = new Data(2);   // Modify the value.

     std::cout << d1->GetData() << " : " << d1->GetNext()   // Does not print null
               << " -> " 
               <<  d1->GetNext()->GetData() << " : " << d1->GetNext()->GetNext()
               << "\n";
}