次の構文の違いが演算子の動作をどのように変えるかを誰か説明してもらえますか?
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!