2017-05-29 29 views
-1

もしあれば、違いは何ですか?例えばC++演算子()括弧 - 演算子Type()vs型演算子()

int operator()私は "公式" C++のドキュメントとの答えを探しています

operator int()対。

+0

彼らは全く違ったことをしています。 –

+1

'int operator()'は、括弧のセットを欠いている関数呼び出し演算子宣言ですが、 'operator int()'は変換演算子宣言になります。 – Pixelchemist

+2

あなたの最後の声明はあなたが答えを知っていることを意味しますか?しかし、その言語規格の関連する部分を無関係に知りたいですか?関数呼び出し演算子は[over.call]、13.5.4で、変換演算子は標準の[class.conv]、12.3節で説明しています。 – WhozCraig

答えて

1

int operator())最初は、関数のように呼び出すことができる関数オブジェクトにオブジェクトを回転関数呼び出しオペレータ、です。この特定の演算子は、intを返します。引数部分がありません。

例:

struct Foo 
{ 
    int operator()(int a, int b) 
    { 
     return a + b; 
    } 
}; 

... 

Foo foo; 
int i = foo(1, 2); // Call the object as a function, and it returns 3 (1+2) 

他方が(operator int()変換演算子あります。この特定のものは、オブジェクトが暗黙的に(または、明示的にexplicitと宣言された場合)intに変換されることを可能にする。 でなければなりません。int(または使用されているタイプであれば、クラスや構造などのユーザー定義タイプも使用できます)。

例:

struct Bar 
{ 
    operator int() 
    { 
     return 123; 
    } 
}; 

... 

Bar bar; 
int i = bar; // Calls the conversion operator, which returns 123 

変換演算子は、一引数コンストラクタの反対です。

0

大きな違いがあります。

class stuff { 
    // init etc 
    int operator()() { 
     return 5; 
    } 
}; 

auto A = stuff(); // init that 
cout << A() << endl; // call the object 

operator T()Tを入力するために、あなたのクラスのオブジェクトを変換するものであるので、あなたはこれを行うことができます::

をあなたはこのようなあなたのクラスを「呼び出す」ことができるように

T operator()は、呼び出し演算子であります

class stuff { 
    operator int() { 
     return 5; 
    } 
}; 

auto A = stuff(); 
cout << int(A) << endl; 

変換は厳密にはexplicitで、上記のように明示的または暗黙的に行うことができます。