1

次の構文の違いが演算子の動作をどのように変えるかを誰か説明してもらえますか?

T & operator()(type one, type two)
const T * operator()(type one, type two)
T & operator()(type one) const
const T & operator()(type one) const
4

1 に答える 1

5

それらがすべてメンバーであると仮定すると、それらはすべてtype値によってオブジェクトを取ります。つまり、少なくとも意味的には、body演算子はtypeオブジェクトの独自のコピーを持っています。operator()構文は、インスタンスが呼び出し可能であることを意味します。operator()たとえば、後に続く(type a, type b)のはパラメータリストです。

これは2つtypeのsを取りtype、への参照を返しますTconstインスタンスでは使用できません。

T & operator()(type one, type two)

それはこのようなものと呼ぶことができます:

MyFunctor x;
type a, b;
T& r = x(a,b); // take reference
T c = x(a,b);  // make copy from reference. Assumes T has copy constructor

このバージョンは2type秒かかり、へのポインタを返しますconst Tconstインスタンスでは使用できません。の非constメソッドをT呼び出すことはできません。

const T * operator()(type one, type two)

例:

MyFunctor x;
type a, b;
const T* p1 = x(a,b); // pointer to const
T* p2 = x(a,b);       // Error! Must have const T* on LHS

これは単一typeのを取り、への参照を返しますT。constまたはnon-constのすべてのインスタンスで使用できます。返された参照が何を参照しているかによってはconst、constメソッドを介して内部データを変更できるようにする際に一貫性が失われる可能性があります。

T & operator()(type one) const

const最後のものは上記のものと同じように機能しますが、リターンが参照するもの以外のメソッドを呼び出すことができない点が異なります。

const T & operator()(type one) const

MyFunctor x;
type a;
const T& r = x(a); // take reference to const
T c = x(a);        // make copy from reference. Assumes T has copy constructor
T& r = x(a);       // Error! Cannot take reference to non-const!
于 2013-02-26T08:34:55.790 に答える