1

C++ では、関数のように演算子をオーバーロードできることを理解しています。C++ の関数と同様に、戻り値を指定する必要があります。

struct A {

    int operator +();

};

ここでoperator+は、 を返す関数としてオーバーロードしましたint。しかし、戻り値を与えながら型をオーバーロードすると、error: return type specified for 'operator int'.

struct A {

    void operator int() {} // error

};

しかし、戻り値を取り除けばうまくいきます。

struct A {

    operator int() {} // pass

};

intエラーは、関数パラメーターの前に を使用することで、 を返す関数を作成していることを意味しますかint? それともこれは何かの間違いですか?関数が値を返さないようにしたい場合はどうすればよいですか? このエラーが発生する理由を誰か説明してもらえますか? ありがとう。

4

4 に答える 4

8

定義により、 をoperator int()返しますint。型のオブジェクトをAに変換する必要があるコンテキストで呼び出されintます。operator+()これは、演算子が;である最初のコード スニペットとはかなり異なります。好きなものを返すように定義できます。

于 2012-09-27T16:31:44.607 に答える
7

は、operator intあなたの A を に変換する演算子ですint。したがって、すでに戻り値の型が定義されており、記述することで、別のvoid operator int戻り値の型が与えられます!

于 2012-09-27T16:31:25.713 に答える
5

operator int()タイプから。への暗黙の変換演算子intです。intしたがって、演算子名で定義されているものを除いて、戻り値のタイプを持つことはできませんでした。

于 2012-09-27T16:32:49.537 に答える
1

通常の(単項および二項)演算子と型変換演算子を混同しています

于 2012-09-27T16:34:26.060 に答える