вторник, 21 мая 2019 г.

Спецификация Go: константы

Существуют логические константы, рунные константы, целочисленные константы, константы с плавающей точкой, комплексные константы и строковые константы. Рунические, целочисленные, с плавающей точкой и комплексные константы вместе называются числовыми константами.

Значение константы представлено руническим, целым, плавающим, мнимым или строковым литералом, идентификатором, обозначающим константу, константным выражением, преобразованием с результатом, который является константой, или значением результата некоторых встроенных функций, таких как unsafe.Sizeof применяемой к любому значению, cap или len применяются к некоторым выражениям, real и imag применяются к комплексной константе, а complex применяется к числовым константам. Значения логической истинности представлены заранее объявленными константами true и false. Предварительно объявленный идентификатор йота (iota) обозначает целочисленную константу.

В общем, сложные константы являются формой константного выражения и обсуждаются в этом разделе.

Числовые константы представляют собой точные значения произвольной точности и не переполняются. Следовательно, нет констант, обозначающих IEEE-754 отрицательный ноль, бесконечность и не числовые (not-a-number) значения.

Константы могут быть типизированными или нетипизированными. Литеральные константы, true, false, йота и некоторые константные выражения, содержащие только нетипизированные константные операнды, являются нетипизированными.

Константе может быть дан тип явно посредством объявления или преобразования константы, или неявно, когда используется в объявлении переменной или присваивании или как операнд в выражении. Это ошибка, если постоянное значение не может быть представлено как значение соответствующего типа.

Нетипизированная константа имеет тип по умолчанию, который является типом, в который константа неявно преобразуется в контекстах, где требуется типизированное значение, например, в коротком объявлении переменной, таком как i := 0, где нет явного типа. Типом по умолчанию нетипизированной константы является bool, rune, int, float64, complex128 или string соответственно, в зависимости от того, является ли она логической, рунической, целой, с плавающей точкой, комплексной или строковой константой.

Ограничение реализации: хотя числовые константы имеют произвольную точность в языке, компилятор может реализовать их, используя внутреннее представление с ограниченной точностью. Тем не менее, каждая реализация должна:

  • Представлять целочисленные константы с как минимум 256 битами.
  • Представлять константы с плавающей точкой, включая части комплексной константы, с мантиссой не менее 256 бит и двоичным показателем со знаком не менее 16 бит.
  • Выдавать ошибку, если не может точно представить целочисленную константу.
  • Выдавать ошибку, если не может представить плавающую точку или комплексную константу из-за переполнения.
  • Округлять до ближайшей представимой константы, если не может представить с плавающей точкой или комплексную константу из-за ограничений по точности.

Эти требования применяются как к литеральным константам, так и к результату вычисления константных выражений.


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


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

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