問題タブ [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.
scala - ここでScala型推論が失敗するのはなぜですか?
私はScalaにこのクラスを持っています:
今、
コンパイルされず、エラーが発生します
エラー:拡張関数のパラメータータイプがありません((x $ 1)=> x $ 1.trim)
タイプが推測されないのはなぜString
ですか?エラーから、暗黙の変換が発生するようです(そうでない場合、エラーは「tap
クラスのメンバーではありません」の行に沿って発生しますString
)。そして、変換はにならなければならないようです。Tapper[String]
つまり、引数のタイプはString => Unit
(または(String => Unit)*
)です。
興味深いのは、どちらかの定義をコメントアウトするとtap
、コンパイルされることです。
c++ - コンパイラがこの呼び出しをテンプレート関数に解決しないのはなぜですか?
printMax
以下のプログラムで、関数の呼び出しではなく、テンプレート関数の呼び出しに対してコンパイラがエラーを生成するのはなぜprintMaxInts
ですか?
c# - オーバーロードの解決と仮想メソッド
次のコードを考えてみましょう (少し長いですが、従うことができれば幸いです)。
このプログラムの出力が "Foo(B)" だと思うなら、あなたは私と同じ船に乗っているでしょう: 完全に間違っています! 実際には「Foo(A)」を出力します
クラスから仮想メソッドを削除すると、C
期待どおりに機能します。「Foo(B)」が出力されます。
コンパイラは、より派生したクラスであるA
場合にバージョンを選択するのはなぜですか?B
c++ - 関数のオーバーロード解決で候補をダンプする方法は?
関数呼び出しの候補関数(または実行可能な関数または最も実行可能な関数)をダンプするにはどうすればよいですか?
g++がクラス階層をダンプするオプションを提供していることを私は知っています。(実際、Visual Studio 2010にも同様のオプションがありますが、文書化されていません。VC++チームのブログで何か読んだことを覚えていますが、はっきりとは覚えていません。)
最近、C ++ 0xドラフトの過負荷解決について読んでいて、本当に恥ずかしい思いをしました。
候補関数、実行可能な関数、または実行可能な最良の関数をダンプするオプションを提供するコンパイラはありますか?
注:過負荷解決シナリオの候補関数は、コンパイラー・エラーの候補関数とは異なります。過負荷解決シナリオの候補/実行可能/実行可能関数には、独自の意味があります。過負荷解決には3つの段階があることを私は知っています。候補関数を見つけます。実行可能な機能を見つけます。最高の実行可能な機能を見つけます。通常、実行可能な最良の機能は1つの候補だけです。それ以外の場合、呼び出しはあいまいです。各ステージには独自のルールがあります。
c++ - オーバーロードの解決に関する奇妙なコンパイル エラー
このコード フラグメント:
Comeau では次のエラーが発生し、GCC では非常によく似たエラーが発生します。
#2
ただし、が の前に定義されている#1
場合、またはlast
が の外で宣言されている場合はコンパイルされns
ます。
これについての説明はありますか?
c++ - NULL が string* に変換されるのはなぜですか?
次のコードを見ました。
Q1> 次の文が理解できません
特に、 とはどういう意味operator T*()
ですか?
Q2>f(NULL)
最終的に がトリガーされるのはなぜf(string*)
ですか?
ありがとうございました
c++ - 名前ルックアップの過負荷解決/あいまいさ(どれか)
$ 7.3.3 / 14(C ++ 03)
'f'のコードのコメントは、'B::x'と'C::x'の間のあいまいさが予想されることを示しています。
ただし、g ++(ideone)またはComeauを使用してコンパイルすると、エラーはわずかに異なります。B::xまたはC::xのあいまいさを示す代わりに、これらのエラーは、AがDのあいまいなベースであるという事実を示します。
prog.cpp:関数内'int f(D *)':prog.cpp:16:エラー:'A'は'D'のあいまいなベースです</p>
と
"ComeauTest.c"、21行目:エラー:基本クラス"A"はあいまいですreturnd-> x(); //あいまい:B::xまたはC::x
$ 10.2の名前検索ルールを見ると、コードスニペットのコメントが実際には正しくないように感じます。エラーは、実際、何よりもまず、基本クラス「A」のあいまいさに関連しています(たとえば、過負荷解決のあいまいさ)。何かご意見は?
c++ - 組み込みのオペレーター候補
C ++ 03 $ 13.6 / 1- "[...]組み込みの候補演算子関数と同じ名前とパラメータータイプのユーザー作成の候補がある場合、組み込みの演算子関数は非表示になり、含まれません。候補関数のセットで。」
規格からのこの引用の意図についてはよくわかりません。組み込み演算子と同じ名前と型を持つユーザー定義の候補関数を定義することは可能ですか?
例えば、明らかに間違っている以下。
では、この引用はどういう意味ですか?
c++ - C++での距離計算エラー
私は次のコードを持っていますが、ここにエラーのリストがあります
c# - ジェネリック、オーバーロードの解決、デリゲート(申し訳ありませんが、より良いタイトルを見つけることができません)
ジェネリックスの非常に奇妙なオーバーロード解決の問題に気づきました...
次の方法を検討してください。
(C#4、LINQPadでテスト済み)
セレクターとしてラムダ式を使用して呼び出そうとするとFoo
、すべてが正常に機能します。
しかし、に置き換えるx => x
とIdentity
、コンパイラは2つのFoo
オーバーロードのどちらかを決定できません。
2番目のオーバーロードを有効な候補にするにはどうすればよいですか?TSource
型推論はそれを正しく判断するint
ので、メソッドのT
パラメーターも同様である必要があります。したがって、戻り型もそうである必要があります...はaまたはaである可能性がありますが、 !ではありません。Identity
int
int
Identity
Func<int,int>
Func<double,double>
Func<int,double>
そしてそれはさらに悪化します!すべての型パラメーターを明示的に指定しても、同じエラーが発生します。
ここにどのようにあいまいさがありますか?私が知る限り、aをとる過負荷がFunc<int,double>
候補になる方法はありません。説明は仕様のどこかにあるはずですが、関連するビットが見つかりません...またはコンパイラのバグかもしれませんが、それはありそうもないと思います。
デリゲートを明示的に作成した場合は機能することに注意してください。
それで、誰かがここで何が起こっているのか説明できますか?また、ラムダでは機能するのにメソッドグループでは機能しないのはなぜですか?