Эта статья требует дополнительных ссылок для проверки . ( август 2009 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
В информатике , значение является представление некоторого объекта , которым можно управлять с помощью программы. Члены типа - это значения этого типа. [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
. Порядок байтов строк может различаться для разных процессоров в зависимости от ассемблера и архитектуры компьютера.
Заметки [ править ]
- Перейти ↑ Mitchell 1996 , p. 9.
- ^ Mitchell 1996 , стр. 389-390.
- ^ «Lvalues и Rvalues (Visual C ++)» . Сеть разработчиков Microsoft . Проверено 3 сентября 2016 года .
Ссылки [ править ]
- Митчелл, Джон С. (1996). Основы языков программирования . MIT Press. ISBN 0-262-13321-0.
- Стрейчи, Кристофер (2000). «Фундаментальные концепции языков программирования». Вычисление высшего порядка и символическое вычисление . 13 : 11–49. DOI : 10,1023 / А: 1010000313106 .
Внешние ссылки [ править ]
- Объект значения
- Перенести образец объекта