четверг, 21 мая 2020 г.

Неожиданный ++, ожидая выражения

Почему эти строки не компилируются?

i := 0
fmt.Println(++i)
fmt.Println(i++)

main.go:9:14: syntax error: unexpected ++, expecting expression
main.go:10:15: syntax error: unexpected ++, expecting comma or )

Ответ

В Go операции инкремента и декремента не могут использоваться как выражения (expressions), только как утверждения (statements). Кроме того, допускается только постфиксная запись.

Вышеупомянутый фрагмент должен быть записан как:

i := 0
i++
fmt.Println(i)
fmt.Println(i)
i++

Без арифметики с указателями удобство значение операторов приращения префикса и постфикса уменьшается. В результате полного удаления их из иерархии выражений упрощается синтаксис выражений и устраняются беспорядочные вопросы, связанные с порядком вычисления ++ и - (например f(i++) и p[i] = q[++i]). Упрощение является значительным.


Читайте также:


Комментариев нет:

Отправить комментарий