問題タブ [overload-resolution]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ラムダが「すべてのコードパスが値を返すわけではない」と報告するのはなぜですか?
次のコードはエラーになります
すべてのコードパスが「System.Func」タイプのラムダ式の値を返すわけではありません。
ハイライトしますline =>
。理由がわかりませんか?
java - javac のオーバーロード解決アルゴリズムを実装する Java コードを探しています
Object
s (具体的には)Object[]
の配列と Constructor オブジェクトの配列があるとします。
Constructor オブジェクトを調べて、配列内のオブジェクトの実際の型に関して最も具体的なものを選択できる Java コードを紹介してもらえますか。javac
つまり、オーバーロードされたメソッドのセットから選択するために使用するアルゴリズムの実装が必要です。
c++ - バインドを使用してパラメーターのない関数を生成すると、エラーが発生します
std::bindとboost::signal2信号の適切な使用法を理解しようとしています。
clang ++(Xcode 4.2.1から)で発生するエラーセットは次のとおりです。
それらは主に2つのラインに焦点を合わせています:
関数プロトタイプを使用するもの:
メインはMyron::Window&であり、サイズ変更とクローズは丁重に行われます。
私が読んだり言われたりしたことはすべて、私がこれらをかなり正しく使用していると私に信じさせてくれるので、何が問題なのかわかりません。
最初のエラーは、おそらくMyron.hファイルのboost/signals2.hppを介してここに入るboost::bindの問題であることに気付きました。2番目のエラーは、もっと謎です。
完全なメインソースファイルはここにあります:
すべてを表示するメインのソースコードリポジトリはここにあります:https ://github.com/iaefai/Myron/tree/master/Myron
試してみることをお勧めします。私は問題を引き出すために成功せずに小さなテストケースを作ってみました。
c# - メソッドを追加すると、あいまいさに関係しないのに、なぜあいまいな呼び出しが追加されるのでしょうか。
私はこのクラスを持っています
私がそれをこのように呼ぶならば:
Normal Winner
コンソールに書き込みます。
しかし、別のメソッドを追加すると、次のようになります。
次のエラーが発生します。
次のメソッドまたはプロパティ間で呼び出しがあいまいです:>'
Overloaded.ComplexOverloadResolution(params string[])
'と'Overloaded.ComplexOverloadResolution<string>(string)
'
メソッドを追加すると、呼び出しのあいまいさが生じる可能性があることは理解できますが、これは、既存の2つのメソッド(params string[])
と<string>(string)
!最初のメソッドはparamsであり、2番目のメソッドはジェネリックであるため、あいまいさに関係する2つのメソッドのどちらも新しく追加されたメソッドではないことは明らかです。
これはバグですか?仕様のどの部分がこれが当てはまるはずだと言っていますか?
c++ - これをコンパイルする必要がありますか?過負荷の解決と暗黙の変換
この例はVC10とgccでコンパイルされているようです(私のバージョンのgccは非常に古いですが)。
編集:R。MartinhoFernandezはgcc4.7でこれを試しましたが、動作は同じです。
しかし、clangは文句を言います:
過負荷の解決では、この式を見て2つの可能な関数を検討しています。
- Something :: operator []の呼び出し(ユーザー定義の変換後)
- const char *の組み込み演算子を呼び出します( "32" [d]と考えてください)(ユーザー定義の変換と標準のdoubleからlongへの変換後)。
私がd["32"]
として書いた場合d.operator[]("32")
、オーバーロードの解決はオプション2を見ることすらなく、clangも正常にコンパイルされます。
編集:(質問の明確化)
これは過負荷解決の複雑な領域のようです。そのため、この場合の過負荷解決を詳細に説明し、標準を引用する回答をいただければ幸いです(不明である可能性が高い/高度なルールがある場合) 。
clangが正しければ、2つがあいまいである理由/一方が他方よりも優先されない理由を知ることにも興味があります。答えは、過負荷解決が2つの候補に含まれる暗黙の変換(ユーザー定義と標準の両方の変換)をどのように考慮するか、および一方が他方よりも優れていない理由を説明する必要があるでしょう。
注:演算子double()が演算子bool()に変更された場合、3つすべて(clang、vc、gcc)は、同様のあいまいなエラーでコンパイルを拒否します。
c++ - フリー関数を隠すメンバ関数
C++ が free 関数 (正しい署名を持つ唯一の関数) を呼び出せないのはなぜですか?
c++ - C ++:継承と過負荷の解決
私はここでC++パズルを読んでいます:http://gotw.ca/gotw/005.htm
静的過負荷解決と動的過負荷解決(またはデフォルトのパラメーター)に関する彼の説明を理解していなかったので、問題を抽出して、自分でいくつかのテストを作成しようとしました。
出力は次のとおりです。
の呼び出しでfoo()
、C ++はそれがを指していることを認識しているように見えDerived
ますが、呼び出しでは、C ++はクラス内の関数を認識してfoo(1.0)
いませんか?void foo(double a)
Derived
私の考えでは、C ++には最初の呼び出しを説明するポリモーフィズムがありますが、過負荷の解決は2番目の呼び出しを説明するコンパイル時に行われるという競合する考えがあります。
c++ - C++変換演算子と過負荷解決
この例では、いくつかのオーバーロードが含まれています。
そしてその出力:
私の質問は-なぜvoid operator <<(A<T> &, const void *)
声明を求められているのtest << source;
ですか?誰かがこのケースをカバーする規格の特定の部分を引用できますか?
c# - C#4.0コンパイル時エラー。誤ったオーバーロードに、参照されていない.NETコンポーネントで定義されたパラメータータイプが含まれている場合、オーバーロードの解決に失敗します
C#4.0コンソールプログラムの簡単なコードは次のとおりです。
SearchRequestには3つのコンストラクターがあります。この例では、4つのパラメーターを取る2つだけが重要です。
これらの2つのコンストラクターの間では、1番目、3番目、および4番目のパラメーターに対して同じタイプおよび名前のパラメーターがあります。2番目のパラメーターのみが異なります:文字列ldapFilterとXmlDocumentフィルター。
上記のコードは、明らかに私にとって、2番目のパラメーターがstringldapFilterとして宣言されているコンストラクターを呼び出しています。
ただし、このコードが含まれているプロジェクトにSystem.XMLへの参照がない場合、コンパイルすると次のエラーが発生します
。タイプ'System.Xml.XmlDocument'は、参照されていないアセンブリで定義されています。アセンブリへの参照を追加する必要があります'System.Xml、Version = 4.0.0.0、Culture = neutral、PublicKeyToken =b77a5c561934e089'
明らかに、コンパイラは、使用するオーバーロードを評価できません。これは、間違ったオーバーロードに、宣言コンポーネントへの参照がないために理解されないタイプのパラメータが含まれているためです。確かに、コンパイラは私のコードに一致する「最良のメソッド」を見つける必要がありますが、2番目に渡されるパラメータは文字列であるため、コンパイラがコードをXmlDocumentオーバーロードに一致させることを気にする必要があるのはなぜですか?または、System.DirectoryServices.Protocols.SearchRequestがXmlDocumentタイプを(コンストラクターパラメータータイプとして)使用している場合。なぜコンパイラは、文字列が1つではないと判断し、正しいオーバーロードを選択できるようにするために、XmlDocumentが何であるかについて十分に理解していないのですか?
エラーなしでコンパイルする2つの回避策がすでにあります。
プロジェクトにSystem.XMLへの参照を追加します。
次のように、2番目のパラメーターに名前を付けます(したがって、必要に応じて3番目と4番目も)。
私の特定のケースでは、2つのオーバーロードの2番目のパラメーターがタイプだけでなく、名前(ldapFilterとfilter)も異なるため、これは機能します。
どちらの回避策も必要ない場合でも、それは素晴らしいことです。
c++ - std::future を使用した VS 11 - これはバグですか?
最近、Visual Studio 11 Developer Preview をインストールしました。スレッドと先物をいじっているうちに、私はこの設定にたどり着きました:
とてもシンプルです。しかし、「foo」には 2 つの引数があるため、VS 11 はそれをコンパイルしたくありません。(ただし、g++ は: http://ideone.com/ANrPj ) (実行時エラーは問題ありません: C++0x の gcc 実験的実装での std::future 例外) (VS 11 エラーメッセージ: http://pastebin. com/F9Xunh2s )
たとえそれが開発者向けのプレビューであっても、このエラーは私には非常に明白であるように見えるので、私は今少し混乱しています。だから私の質問は:
- このコードは C++11 標準に従って正しいですか?
- このバグは既に知られている/報告されていますか?