6

次のコードを使用できない理由はありますか?

ulong test(int a, int b)
{
    return a == b ? 0 : 1;
}

それは私を示しています:

Cannot implicitly convert type 'int' to 'ulong'. An explicit conversion exists (are you missing a cast?)

以下が機能します。

ulong test(int a, int b)
{
    return false ? 0 : 1;
}

私は問題を解決する方法を知っています。理由を知りたいだけです。

ありがとう。

4

3 に答える 3

2

int は負の値を表すことができますが、ulong はできないため、int として型指定された変数を暗黙的に ulong に変換することはできません。定数式の値が負でない場合、定数は暗黙的に変換できます。

2 番目の例は定数式です。

于 2015-09-30T17:02:38.087 に答える
0

これはうまくいきます:

ulong test(int a, int b)
{
    return a == b ? 0UL : 1UL;
}

ほら、コンパイラは数値のサイズから型を推測するので、特定の型が必要な場合は接尾辞を付ける必要があります。このMSDN ページのリテラル セクションを参照してください。

編集:私に指摘されたように、この質問はそれを機能させる方法についての答えを探していませんでした。リンクされている MSDN の記事にはまだ価値があると思います。失敗したケースが機能しない理由を説明できる情報を提供しますが、他のケースが成功する理由については説明しません。確かに興味深い問題。

于 2015-09-30T16:51:54.467 に答える