函式呼叫 (C++)

使用括號叫用的函式呼叫運算子是二元運算子。

語法

primary-expression ( expression-list )

備註

在此內容中,primary-expression 是第一個運算元,而 expression-list (可能空白的引數清單) 是第二個運算元。 函式呼叫運算子用於需要一些參數的運算。 這不會有問題,因為 expression-list 是清單,而不是單一運算元。 函式呼叫運算子必須是非靜態成員函式。

函數呼叫運算子在多載時,不會修改呼叫函式的方式;而是會修改運算子在套用到特定類別類型的物件時如何解譯。 例如,下列程式碼通常會沒有意義:

Point pt;
pt( 3, 2 );

但若是有適當多載的函式呼叫運算子,此語法可以用來將 x 座標偏移 3 個單位,y 座標偏移 2 個單位。 下列程式碼表示此定義:

// function_call.cpp
class Point
{
public:
    Point() { _x = _y = 0; }
    Point &operator()( int dx, int dy )
        { _x += dx; _y += dy; return *this; }
private:
    int _x, _y;
};

int main()
{
   Point pt;
   pt( 3, 2 );
}

請注意,函式呼叫運算子會套用到物件的名稱,而不是函式的名稱。

您也可以使用函式指標 (而不是函式本身) 來多載函式呼叫運算子。

typedef void(*ptf)();
void func()
{
}
struct S
{
   operator ptf()
   {
      return func;
   }
};

int main()
{
   S s;
   s();//operates as s.operator ptf()()
}

另請參閱

運算子多載