もしあれば、違いは何ですか?例えばC++演算子()括弧 - 演算子Type()vs型演算子()
:int operator()
私は "公式" C++のドキュメントとの答えを探しています
operator int()
対。
もしあれば、違いは何ですか?例えばC++演算子()括弧 - 演算子Type()vs型演算子()
:int operator()
私は "公式" C++のドキュメントとの答えを探しています
operator int()
対。
(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
変換演算子は、一引数コンストラクタの反対です。
大きな違いがあります。
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
で、上記のように明示的または暗黙的に行うことができます。
彼らは全く違ったことをしています。 –
'int operator()'は、括弧のセットを欠いている関数呼び出し演算子宣言ですが、 'operator int()'は変換演算子宣言になります。 – Pixelchemist
あなたの最後の声明はあなたが答えを知っていることを意味しますか?しかし、その言語規格の関連する部分を無関係に知りたいですか?関数呼び出し演算子は[over.call]、13.5.4で、変換演算子は標準の[class.conv]、12.3節で説明しています。 – WhozCraig