|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ 実 : [み, じつ] 【名詞】 1. fruit 2. nut 3. seed 4. content 5. good result ・ 引数 : [ひきすう] (n) argument (e.g., function, program, programme) ・ 数 : [すう, かず] 1. (n,n-suf) number 2. figure ・ 依 : [え] (n) depending on ・ 名 : [な] 【名詞】 1. name 2. reputation ・ 名前 : [なまえ] 【名詞】 1. name ・ 探索 : [たんさく] 1. (n,vs) search 2. hunt 3. (item of) research 4. exploration 5. investigation ・ 索 : [さく] 【名詞】 1. rope 2. cord
実引数依存の名前探索 (じつひきすういぞんのなまえたんさく、ADL)とは、C++において関数呼出時に与えられた引数の型に依存して、呼び出す関数を探索 (lookup)する仕組みのことである。英語ではKoenig lookup、argument dependent lookup (ADL)、argument dependent name lookupなどと呼ばれる。なお、Koenig lookupとは、この仕組みをAndrew Koenigが提案したことにちなむ。 ==概要== 実引数依存の名前探索では、通常の名前探索では考慮されない他の名前空間も探索される可能性がある。探索される名前空間は実引数に依存する。直接・間接的に基底クラスを持つクラスAに対しては、その直接・間接的な基底クラスが「Aに関連するクラス」となる。Aが含まれる名前空間とAに関連するクラスが含まれる名前空間は、「Aに関連する名前空間」となる。A型のオブジェクトが関数呼出の際に実引数として用いられると、関連する名前空間からその関数が探索される。 探索によって見つかった宣言の集合は通常の名前探索で見付けた名前と関連する名前空間から見付けた名前とをまとめたものになる。その後この見付かった宣言の集合の中から多重定義の解決が行われる。なお、通常の名前探索でクラスのメンバ関数が探索された場合、実引数依存の名前探索は行われない。 たとえばこのような感じである: 標準C++ライブラリでは、実引数依存の名前探索を主に演算子多重定義関数に対して用いている。たとえば次のプログラムは実引数依存の名前探索が無ければコンパイルできない。 std::ostream& std::operator <<(std::ostream&, const std::string&) と宣言された関数は、実引数依存の探索によって見付かる(この関数はstd名前空間の中に存在することに注目)。ところで、std::endlは関数であるが、operator <<の引数として用いられているため、std::などといった完全な修飾が必要であることに注意。抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「実引数依存の名前探索」の詳細全文を読む スポンサード リンク
|