1

遭遇したとき

x op y

ADLはメンバーx.op(y)を見つけますか?または、ルックアップはx.op(y)ではなく、ADL(op、x、y)のように指定されていますか?

4

1 に答える 1

4

メンバー候補、非メンバー候補(ADLを使用)、および組み込み候補が考慮されます。最適な候補が選ばれます。

[over.match.oper] / 3

operator @cv-unqualifiedバージョンがであるタイプのオペランドを持つ単項の場合、およびcv-unqualifiedバージョンがであるタイプの左オペランドとcv-unqualifiedバージョンがであるタイプの右オペランドをT1持つバイナリの場合、3セットの候補関数、指定されたメンバー候補、非メンバー候補、および組み込み候補は、次のように構成されます。operator @T1T2

  • が完全なクラスタイプの場合T1、メンバー候補のセットはT1::operator@(13.3.1.1.1)の修飾ルックアップの結果です。それ以外の場合、メンバー候補のセットは空です。

  • 非メンバー候補のセットは、operator@すべてのメンバー関数が無視されることを除いて、非修飾関数呼び出し(3.4.2)での名前ルックアップの通常の規則に従って、式のコンテキストでの非修飾ルックアップの結果です。T1ただし、クラスタイプのオペランドがない場合は、ルックアップセット内で、タイプまたは「(おそらくcv修飾された)への参照」の最初のパラメーターを持つ非メンバー関数のみが、列挙型の場合、または(存在する場合T1T1右オペランド)タイプの2番目のパラメーターT2または「(おそらくcv修飾された)T2」への参照(が列挙型の場合)T2は、候補関数です。

  • operator ,単項operator &、またはのoperator ->場合、組み込み候補セットは空です。他のすべての演算子の場合、組み込みの候補には、13.6で定義されたすべての候補演算子関数が含まれ、特定の演算子と比較して、

    • 同じ演算子名を持ち、
    • 同じ数のオペランドを受け入れ、
    • 13.3.3.1に従って、指定された1つまたは複数のオペランドを変換できるオペランドタイプを受け入れます。
    • 非テンプレート非メンバー候補と同じparameter-type-listを持っていません。

[over.match.oper] / 6

過負荷解決の候補関数のセットは、メンバー候補、非メンバー候補、および組み込み候補の和集合です。引数リストには、演算子のすべてのオペランドが含まれています。候補関数のセットから最適な関数が13.3.2および13.3.3に従って選択されます。

于 2013-01-02T00:23:44.157 に答える