Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В информатике , значение является представление некоторого объекта , которым можно управлять с помощью программы. Члены типа - это значения этого типа. [1]

«Значение переменной» задается соответствующим отображением в среде . [ необходима цитата ] В языках с присваиваемыми переменными становится необходимым различать r-значение (или содержимое) и l-значение (или местоположение) переменной. [2]

В декларативных (высокоуровневых) языках значения должны быть ссылочно прозрачными . Это означает, что результирующее значение не зависит от места, в котором хранится (под) выражение, необходимое для вычисления значения. Только содержимое местоположения (биты, равны ли они 1 или 0) и их интерпретация имеют значение. [ необходима цитата ]

Присвоение: l-значения и r-значения [ править ]

В некоторых языках используется идея l-значений и r-значений , вытекающая из типичного режима оценки в левой и правой частях оператора присваивания. L-значение относится к объекту, который сохраняется за пределами одного выражения. Значение r - это временное значение, которое не сохраняется за пределами выражения, которое его использует. [3]

Понятие l-значений и r-значений было введено Комбинированным языком программирования (CPL). Понятия в выражении г-значения, L-значением, и г-значение / л-значения аналогичны параметров режимов входного параметра (имеет значение), выходной параметр (могут быть назначены), а также входного параметра / вывода (имеет значение и может быть назначено), хотя технические детали различаются в зависимости от контекста и языка.

R-значения и адреса [ править ]

Во многих языках, особенно в семействе C , l-значения имеют адреса хранения , которые программно доступны для запущенной программы (например, через некоторый оператор адресации, такой как "&" в C / C ++), что означает, что они являются переменными или де- ссылаются на ссылки на определенную ячейку памяти. R-значения могут быть l-значениями (см. Ниже) или не-l-значениями - термин, используемый только для отличия от l-значений. Рассмотрим выражение C 4 + 9. При выполнении компьютер генерирует целочисленное значение 13, но поскольку программа явно не указала, где в компьютере хранится это 13, выражение не является l-значением. С другой стороны, если программа на C объявляет переменную x и присваивает x значение 13, тогда выражение xимеет значение 13 и является l-значением.

В C термин l-значение первоначально означал что-то, что может быть присвоено (отсюда и название, указывающее, что оно находится слева от оператора присваивания), но поскольку зарезервированное слово const(константа) было добавлено к языку, термин теперь "изменяемое l-значение". В C ++ 11 специального семантико-глиф &&существует (не следует путать с &&оператором используется для логических операций), чтобы обозначить использование / доступ адреса Выражения в для компилятора только ; т.е. адрес не может быть получен с помощью &оператора адресации во время выполнения программы (см. использование семантики перемещения ).

Этот тип ссылки может применяться ко всем r-значениям, включая значения, отличные от l, а также l-значения. Некоторые процессоры предоставляют одну или несколько инструкций, которые принимают немедленное значение , иногда для краткости называемое «немедленным». Непосредственное значение сохраняется как часть инструкции, которая использует его, обычно для загрузки, добавления или вычитания из регистра. Другие части инструкции - это код операции и пункт назначения. Последнее может быть неявным. (Непосредственное значение может находиться в регистре или храниться в другом месте в памяти, требуя, чтобы инструкция содержала прямой или косвенный адрес [например, адрес индексного регистра] для значения.)

Выражение l-значения обозначает объект (относится к нему). Немодифицируемое l-значение можно адресовать, но нельзя присвоить. Изменяемое l-значение позволяет как изменять, так и исследовать обозначенный объект. Значение r - это любое выражение, значение, отличное от l, - это любое выражение, которое не является значением l. Одним из примеров является «немедленное значение» (см. Ниже) и, следовательно, не адресуемое.

На языке ассемблера [ править ]

Значение может быть практически любым типом данных по данному типу данных , например, строкой, цифрой, отдельной буквой.

Процессоры часто поддерживают более одного размера непосредственных данных, например 8 или 16 бит, используя уникальный код операции и мнемонику для каждого варианта инструкции. Если программист предоставляет значение данных, которое не подходит, ассемблер выдает сообщение об ошибке «Вне допустимого диапазона». Большинство ассемблеров позволяют выражать непосредственное значение в виде ASCII , десятичных , шестнадцатеричных , восьмеричных или двоичных данных. Таким образом, символ ASCII 'A'совпадает с 65или 0x41. Порядок байтов строк может различаться для разных процессоров в зависимости от ассемблера и архитектуры компьютера.

Заметки [ править ]

  1. Перейти ↑ Mitchell 1996 , p. 9.
  2. ^ Mitchell 1996 , стр. 389-390.
  3. ^ «Lvalues ​​и Rvalues ​​(Visual C ++)» . Сеть разработчиков Microsoft . Проверено 3 сентября 2016 года .

Ссылки [ править ]

  • Митчелл, Джон С. (1996). Основы языков программирования . MIT Press. ISBN 0-262-13321-0.
  • Стрейчи, Кристофер (2000). «Фундаментальные концепции языков программирования». Вычисление высшего порядка и символическое вычисление . 13 : 11–49. DOI : 10,1023 / А: 1010000313106 .

Внешние ссылки [ править ]

  • Объект значения
  • Перенести образец объекта