函式呼叫結果

除非做為參考型別宣告的函式,函式呼叫會評估為 r-value。參考傳回型別與函式會評估為左值,並且能在指派陳述式的左邊,如下所示:

// expre_Function_Call_Results.cpp
// compile with: /EHsc
#include <iostream>
class Point
{
public:
    // Define "accessor" functions as
    // reference types.
    unsigned& x() { return _x; }
    unsigned& y() { return _y; }
private:
    unsigned _x;
    unsigned _y;
};

using namespace std;
int main()
{
    Point ThePoint;

    ThePoint.x() = 7;           // Use x() as an l-value.
    unsigned y = ThePoint.y();  // Use y() as an r-value.

    // Use x() and y() as r-values.
    cout << "x = " << ThePoint.x() << "\n"
         << "y = " << ThePoint.y() << "\n";
}

上述程式碼中定義了一個稱為Point,其包含了私用資料物件表示 xy 座標。您必須修改這些資料物件,並擷取其值。這個程式是以下其中一個類別 ; 的幾個設計範本 使用GetX和SetX或GetY和SetY函式是另一個可能的設計。

函式,傳回的類別型別、 類別型別、 指標或參考類別型別可以當做成員選取運算子的左運算元。因此,下列程式碼是合法的:

// expre_Function_Results2.cpp
class A {
public:
   A() {}
   A(int i) {}
   int SetA( int i ) {
      return (I = i);
   }

   int GetA() {
      return I;
   }

private:
   int I;
};

A func1() {
   A a = 0;
   return a;
}

A* func2() {
   A *a = new A();
   return a;
}

A& func3() {
   A *a = new A();
   A &b = *a;
   return b;
}

int main() {
   int iResult = func1().GetA();
   func2()->SetA( 3 );
   func3().SetA( 7 );
}

可以遞迴地呼叫函式。如需有關函式宣告的詳細資訊,請參閱函式規範成員函式。相關的資料是在程式和連結

請參閱

參考

後置的運算式