Очки последовательности на языке с порядком оценки слева направо? - PullRequest
0 голосов
/ 16 января 2011

Когда порядок оценки указан как «слева направо» и язык является (псевдо) C-подобным, , какие точки последовательности в следующих примерах?

int x = 1;
int z = x-- + x; // z = 1 + 0 or z = 1 + 1?
my_func(x++); // x incremented before or after my_func execution?
my_func(x++ + --x); // combining those above

1 Ответ

2 голосов
/ 16 января 2011

Точка последовательности - это то, что в стандарте языка определяется как точка последовательности. Ответы, которые я собираюсь дать, относятся к C, но другой «C-подобный» язык вполне может определять разные точки последовательности и, следовательно, иметь разные ответы на эти вопросы.

int z = x-- + x; // z = 1 + 0 or z = 1 + 1?

Поскольку + не является точкой последовательности в C, результат вышеприведенного оператора не определен.

my_func(x++); // x incremented before or after my_func execution?

x увеличивается до запуска my_func, но my_func вызывается со старым значением x в качестве аргумента.

my_func(x++ + --x); // combining those above

Не определено по той же причине, что и первая.

...