16 Stimmen

Welche Bedeutung hat die Rückgabe durch Verweis?

In C++,

function() = 10;

funktioniert, wenn die Funktion eine Variable per Referenz zurückgibt.

Was sind die Anwendungsfälle dafür?

2voto

Philipp Punkte 45643

SO habe ich meine Antwort vermasselt

Sie müssen nicht einmal eine Referenz zurückgeben:

struct C { };

C f() {
  return C();
}

int main() {
  C a;
  f() = a;  // compiles fine
}

Da dieses Verhalten recht überraschend ist, sollten Sie normalerweise einen konstanten Wert oder einen konstanten Verweis zurückgeben, es sei denn, der Benutzer hat die sinnvolle Absicht, das Ergebnis zu ändern.

2voto

mip Punkte 7905

Sie kann bei der Implementierung von Accessoren nützlich sein

class Matrix
{
   public:
      //I skip constructor, destructor etc

      int & operator ()(int row, int col)
      {
         return m_arr[row + col * size];
      }

   private:
      int size;
      int * m_arr;
}

Matrix m(10);
m(1,0) = 10;  //assign a value to row 1, col 0

1voto

MSalters Punkte 166675

Ein weiterer klassischer Fall:

class Foo {
  Foo();
public:
  static Foo& getSingleton();
};

0voto

ezpz Punkte 11421

std::vector hat operator[] die es nicht erlauben würden vec[n] = m sonst.

0voto

DMA57361 Punkte 3550

Sie können auch eine Methodenverkettung erreichen (wenn Sie dies wünschen), indem Sie die Rückgabe per Referenz verwenden.

class A
{
public:
    A& method1()
    {
        //do something
        return *this;   //return ref to the current object
    }
    A& method2(int i);
    A& method3(float f);  //other bodies omitted for brevity
};

int main()
{
    A aObj;
    aObj.method1().method2(5).method3(0.75);

    //or use it like this, if you prefer
    aObj.method1()
        .method2(5)
        .method3(0.75);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X