Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

7.7.6Выражения приведения типа

Выражение_приведения_типа используется для явного преобразования выражения в данный тип.

выражение_приведения_к_типу: ( тип ) унарное_выражение

Выражение_приведения_типа вида (T)E, где T является типом, а E —унарным_выражением, выполняет явное преобразование (§6.2) значения E в тип T. Если явное преобразование из E в T отсутствует, то возникает ошибка времени привязки. Иначе результатом является значение, полученное при явном преобразовании. Результат всегда классифицируется как значение, даже если E обозначает переменную.

Запись выражения_приведения_типа создает некоторую синтаксическую неоднозначность. Например, выражение (x)–y можно интерпретировать как выражение_приведения_типа (приведение–y к типу x) или как аддитивное_выражение с выражением_в_скобках (в котором вычисляется значение x – y).

Для разрешения неоднозначности в выражении_приведения_типа существует следующее правило. Последовательность из одной или нескольких лексем (§2.3.3), заключенная в круглые скобки, считается началом выражения_приведения_типа, только если верно одно из следующих условий:

  • Последовательность лексем имеет правильную грамматику для типа, но не для выражения.

  • Последовательность лексем имеет правильную грамматику для типа, и лексема, непосредственно следующая за закрывающей скобкой, равна «~», «!», «(», идентификатору (§2.4.1), литералу (§2.4.4) или любому ключевому слову (§2.4.3) за исключением as и is.

Термин «правильная грамматика» выше означает только то, что последовательность лексем должна соответствовать конкретному грамматическому выводу. В нем специально не учитывается фактическое значение каких-либо составляющих идентификаторов. Например, если x и y являются идентификаторами, то выражение x.y имеет правильную грамматику для типа, даже если x.y фактически не означает тип.

Из правила снятия неоднозначности следует, что если x и y являются идентификаторами, то (x)y, (x)(y) и (x)(-y) являются выражениями_приведения_типа, а (x)-y не является, даже если x обозначает тип. Однако если x является ключевым словом, которое обозначает стандартный тип (например, int), то все четыре вида выражения являются выражениями_приведения_типа (потому что такое ключевое слово не может само быть выражением).

7.8Арифметические операторы

Операторы *, /, %, + и– называются арифметическими операторами.

мультипликативное_выражение: унарное_выражение мультипликативное_выражение * унарное_выражение мультипликативное_выражение / унарное_выражение мультипликативное_выражение % унарное_выражение

аддитивное_выражение: мультипликативное_выражение аддитивное_выражение + мультипликативное_выражение аддитивное_выражение – мультипликативное_выражение

Если операнд арифметического оператора имеет динамический тип во время компиляции, то он динамически связан (§7.2.2). В этом случае тип времени компиляции выражения динамический, а разрешение, приведенное ниже, будет иметь место во время выполнения при использовании типа времени выполнения тех операндов, которые имеют динамический тип во время компиляции.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]