.NET 4ベータ2では、新しいNumericsネームスペースがstruct BigInteger
です。 documentationは、私が予期していたように不変型であると述べています。BigIntegerは不変かどうか?
しかし、ポストインクリメント演算子(++
)は少し混乱しています。これは価値が変異しているように見えます。以下のwhileループは動作します:BigIntegerのオブジェクトは不変 なので、インクリメント演算子 が 新しいBigIntegerのオブジェクトを作成します
:
static BigInteger Factorial(BigInteger n) { BigInteger result = BigInteger.One; BigInteger b = BigInteger.One; while (b <= n) { result = result * b; b++; // immutable ? } return result; }
これは、MSDNはインクリメント演算子について言いたいことがあるものですvalueは、valueで表されるBigInteger オブジェクトの1つです。 したがって、インクリメント への繰り返し呼び出しは高価になる可能性があります。
すべてが順調と罰金、私は、それ自体でb = b++
どうやら++
を使用していた場合には、値を変更するのに十分です理解しているだろう。
どのような考えですか?
編集:
Lasseが指摘しているように、ポストインクリメントの仕組みについては、step-by-step specificationがあります。しかし、これはまだ変わらないと思われます。たとえば、この演算子を使用するとスレッドセーフであるとは思いません。コメントし、このかもしれませんが、今
var temp = b;
b = b + 1;
<use temp for the expression where b++ was located>
:
b++;
は同等です:現実になるよう
妥当と聞こえるが、それでも変わらないようだ。私は少し質問を編集します。 –
いいえ、それは不変を破らない、私の答えを更新させてください。 –
's + = s2'には目に見える割り当てがあります。あなたが 'b ++ 'も代入、つまり' b = b + 1'であると受け入れるなら、それは合っています。しかし、「++」はまだ変わっているように感じます。 –