public struct MyInt
{
public int csInt;
public MyInt(int i)
{
csInt = i;
}
public MyInt(double d)
{
csInt = (int)d;
}
public static implicit operator MyInt(int value)
{
return new MyInt(value);
}
public static implicit operator MyInt(double value)
{
return new MyInt(value);
}
}
int MyFunc(MyInt i = 0)
{
return -1;
}
MyInt
デフォルト値として受け入れるラッパー構造体(ここでは簡略化)を実装したいint
(これは奇妙で不自然であることはわかっています。他の言語形式に準拠するために必要なだけです)が、上記のようにコーディングするとエラーが発生します。int MyFunc(MyInt i = 0)
VS2012が言った場所:
Type MyInt への標準変換がないため、型 'int' の値を既定のパラメーターとして使用することはできません
私が知っているように、C# では int と double も struct として定義されています。だから私は次のことを試しました:
int MyFunc(double i = (int)0)
{
return -1;
}
合格しました!したがって、デフォルトのパラメーターでは型変換が許可されていると思います。
だから私の質問は:
- MyInt の暗黙的な型変換をデフォルトの para として使用できないのはなぜですか?
- VS エラー メッセージでの標準変換の意味は何ですか? MyInt で定義されている暗黙の変換とは異なりますか?