私はこの機能をC++で見つけ出すのに少し驚きました。ここで関数のパラメータを同じ型に強制し、型コンストラクタを使用して指定された型に一致させることはできません。
コードです:
struct XY {
int x,y;
XY(int v) : x(v), y(v) {}
};
bool test1(const XY &pos){
return pos.x < pos.y;
}
bool test1(int x, int y){
return x < y;
}
void functest(){
int val = 5;
test1(val);
}
だから私は、このような過負荷が存在することは、同じタイプのコンストラクタを持っているので、それはXY型の機能を使用するかどうかにかかわらず、整数パラメータを持つ関数を呼び出すことができます!私はそれが起こることを望んでいません、私はこれを防ぐために何ができますか?
私は元々3つの関数を持っていました:XY、int + int、int。 intのために、配列アクセスのためにx/y値を1つの整数に組み合わせました。私はこのメソッドがいくつかの状況で非常に危険であることに気付きました。そのため、コードを変更する最も簡単な方法はint関数を削除することでしたが、修正する場所。しかし、私はまだ型が別の型のコンストラクタからそのように変換されるべきではないと思う...ちょうど私に奇妙なようです。 – Rookie
-1:C++のメーカは非常に良い理由で '明示的に '追加しました。コンストラクタが特定のパラメータを取っているからといって、常に変換を許可するつもりはありません。時々、あなたは本当にエラーが欲しいです、あなたはコンパイラがそれを動作させる方法を見つけることを望んでいません。 「働く」ことは間違っているからです。 –
さて、わかりました。そしてそれは人のために-1を出そうとする理由ではありません。与えられた例では、私がそれに応答したとき、それは1つの引数と2つの引数のために非因数であり、 'explicit'キーワードを必要とすることとは関係ありませんでした。 –