Почему эти строки не компилируются?
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]). Упрощение является значительным.
Читайте также:
- Спецификация Go: утверждения инкремента/декремента (IncDec statements)
- Спецификация Go: операторы, приоритет операторов
- Go FAQ: Почему ++ и -- в Go являются операторами, а не выражениями? И почему постфикс, а не префикс?
Комментариев нет:
Отправить комментарий