次の構文の違いが演算子の動作をどのように変えるかを誰か説明してもらえますか?
T & operator()(type one, type two)
const T * operator()(type one, type two)
T & operator()(type one) const
const T & operator()(type one) const
次の構文の違いが演算子の動作をどのように変えるかを誰か説明してもらえますか?
T & operator()(type one, type two)
const T * operator()(type one, type two)
T & operator()(type one) const
const T & operator()(type one) const
それらがすべてメンバーであると仮定すると、それらはすべてtype
値によってオブジェクトを取ります。つまり、少なくとも意味的には、body演算子はtype
オブジェクトの独自のコピーを持っています。operator()
構文は、インスタンスが呼び出し可能であることを意味します。operator()
たとえば、後に続く(type a, type b)
のはパラメータリストです。
これは2つtype
のsを取りtype
、への参照を返しますT
。const
インスタンスでは使用できません。
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 T
。const
インスタンスでは使用できません。の非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!