4 「引数依存ルックアップ」(別名ADL、または「ケーニッヒルックアップ」)とは何ですか? 引数に依存するルックアップが何であるかについてのいくつかの良い説明は何ですか?多くの人がケーニッヒルックアップとも呼んでいます。 できれば知りたいです。 なぜそれが良いのですか? なぜそれが悪いのですか? それはどのように機能しますか? 176 c++ argument-dependent-lookup name-lookup c++-faq
4 ADLが関数テンプレートを見つけられないのはなぜですか? C ++仕様のどの部分が、引数に依存するルックアップが、関連付けられた名前空間のセットで関数テンプレートを見つけることを制限していますか?言い換えると、main以下の最後の呼び出しがコンパイルに失敗するのはなぜですか? namespace ns { struct foo {}; template<int i> void frob(foo const&) {} void non_template(foo const&) {} } int main() { ns::foo f; non_template(f); // This is fine. frob<0>(f); // This is not. } 83 c++ argument-dependent-lookup name-lookup template-function
2 このテンプレート関数が期待どおりに動作しないのはなぜですか? 私はテンプレート関数について読んでいて、この問題で混乱しました: #include <iostream> void f(int) { std::cout << "f(int)\n"; } template<typename T> void g(T val) { std::cout << typeid(val).name() << " "; f(val); } void f(double) { std::cout << "f(double)\n"; } template void g<double>(double); int main() { f(1.0); // f(double) f(1); // f(int) g(1.0); // d f(int), this is surprising … 23 c++ function-templates name-lookup dependent-name unqualified-name
3 行外のメンバー関数定義にグローバルスコープまでの完全修飾クラス名が必要ですか? この質問で、クラス外のメンバー関数定義でクラス名(グローバルスコープ演算子を含む)を完全に修飾することが有用/必要であるかどうか疑問に思いました。 一方では、これが以前に行われたのを見たことがありません(適切に行うための構文は不明瞭に思われます)。もう1つは、C ++の名前検索は非常に簡単ではないため、コーナーケースが存在する可能性があります。 質問: クラス外のメンバー関数定義の導入 ReturnType (::Fully::Qualified::Class::Name::MemberFunctionName)(...) { ... } が ReturnType Fully::Qualified::Class::Name::MemberFunctionName(...) { ... }(グローバルスコープ::プレフィックスなし)と異なる場合はありますか? メンバー関数の定義は、クラスを囲む名前空間に配置する必要があるため、これは有効な例ではありません。 14 c++ name-lookup global-scope qualified-name scope-resolution-operator
2 多重継承は、疑わしいあいまいな仮想関数の過負荷につながります この例では、クラスFooとBarはライブラリから提供されています。私のクラスBazは両方から継承します。 struct Foo { void do_stuff (int, int); }; struct Bar { virtual void do_stuff (float) = 0; }; struct Baz : public Foo, public Bar { void func () { do_stuff (1.1f); // ERROR HERE } }; struct BazImpl : public Baz { void do_stuff (float) override {}; }; … 8 c++ multiple-inheritance virtual-functions overload-resolution name-lookup