タグ付けされた質問 「ambiguous-call」

1
あいまいな一致例外を回避する
コンパイル時にオブジェクトの型がわからないため、リフレクションを介して型に対して静的メソッドParseを呼び出しています(ただし、文字列をとるParseメソッドがあります)。 ただし、おそらく単一のオブジェクト(string、int、doubleなど)をとるオーバーロードされたParseメソッドがたくさんあるため、あいまいな一致例外が発生します。 正しいメソッド(Parse(string s))に到達し、例外がスローされないようにするために、メソッド呼び出しをより具体的にする方法を教えてください。 私のコードは次のようになります: Type returnType = p.PropertyType; object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });

3
最も負のint値は、あいまいな関数のオーバーロードに関するエラーを引き起こすのはなぜですか?
私はC ++での関数のオーバーロードについて学び、これに遭遇しました: void display(int a) { cout << "int" << endl; } void display(unsigned a) { cout << "unsigned" << endl; } int main() { int i = -2147483648; cout << i << endl; //will display -2147483648 display(-2147483648); } 私が理解したことから、int範囲(私の場合intは4バイト)で指定された値は呼び出されdisplay(int)、この範囲外の値はあいまいになります(コンパイラーが呼び出す関数を決定できないため)。これはint、最小値を除くすべての値の範囲、つまり-2147483648エラーでコンパイルが失敗する場合に有効です。 オーバーロードの呼び出しdisplay(long int)があいまいです しかし、同じ値をに取り、その値を出力するintと、になります2147483648。私は文字通りこの振る舞いに混乱しています。 この動作は、最も負の数が渡されたときにのみ観察されるのはなぜですか?(a shortが-32768- と一緒に使用された場合の動作は同じです。実際には、負の数と正の数が同じ2進数表現を持つ場合) 使用するコンパイラ:g ++(GCC)4.8.5
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.