5

次の擬似コードを検討してください (言語に依存しません)。

int f(reference int y) {
   y++;

   return 2;
}

int v = 1;

v += f(v);

の評価中に関数fが変化したときy(つまり) 、元の値が「凍結」されて「失われた」に変化しますか?vv += f(v)vv

v += f(v); // Compute the address of v (l-value)
           // Evaluate v (1)
           // Execute f(v), which returns 2
           // Store 1 + 2 
printf(v); // 3
4

1 に答える 1

3

ほとんどの言語で+=は、演算子 (および他の複合代入演算子や単純代入演算子) は右から左への結合性を持ちます。つまりf(v)、最初に value が評価され、その結果が の現在の値に追加されますv

したがって、あなたの例では、3 ではなく 4 にする必要があります。

C++: (デモ)

int f(int& v) {
  v++;
  return 2;
}

int main() {
  int v = 1;
  v += f(v);
  cout << v; // 4
}

Perl: (デモ)

sub f {
  $_[0]++;
  return 2;
}

my $v = 1;
$v += f($v);

print $v; # 4
于 2013-06-08T20:13:47.620 に答える