24

型の厳密さのために、サイズが負になることができない場合、サイズを uint として保存することがあります。for ループで使用すると、次のようになります。

var size uint32 = 8
for i := 0; i < size; {
    n := //doesn't matter how how this value is determined
    i += n
}

ただし、次のエラー メッセージが表示されます。invalid operation: i < size (mismatched types int and uint32)

for ループを書き直して、次のような型を指定します。

for var i uint32 = 0; i < size; {

次のコンパイラ エラーが発生します。syntax error: var declaration not allowed in for initializer

これらのエラーを回避する唯一の方法は次のとおりです。

for i := 0; uint32(i) < size; {

また

var i uint32 = 0
for i < size {

私はすべての反復でキャストしているため、最初のものは非効率的であり、2番目のものはエレガントではありません。これを行うより良い方法はありますか?

4

1 に答える 1

38

できるよ:

for i := uint32(0); i < size; {
    //whatever
}

一般に、サイズが負になることがない場合でも、符号なし整数を使用することはお勧めしません。私は利点を知りません。意図的にオーバーフローする場合にのみ、符号なし整数を使用します。

于 2012-11-14T17:45:19.333 に答える