Вопрос

Что означает слово «литерал», когда оно используется в контексте, например, литеральных строк и литеральных значений?

В чем разница между буквальным значением и значением?

Это было полезно?

Решение

Литерал — это «любое обозначение для представляющий значение в исходном коде" (Википедия)

(Сравните это с идентификаторы, который ссылаться к значению в памяти.)

Примеры:

  • "hey" (строка)
  • false (логическое значение)
  • 3.14 (действительное число)
  • [1,2,3] (список номеров)
  • (x) => x*x (функция)
  • /^1?$|^(11+?)\1+$/ (регулярное выражение)

Некоторые вещи, которые не являются литералами:

  • std::cout (идентификатор)
  • foo = 0; (заявление)
  • 1+2 (выражение)

Другие советы

Литерал — это значение, которое жестко закодировано непосредственно в вашем исходном коде.

Например:

string x = "This is a literal";
int y = 2; // so is 2, but not y
int z = y + 4; // y and z are not literals, but 4 is
int a = 1 + 2; // 1 + 2 is not a literal (it is an expression), but 1 and 2 considered separately are literals

Некоторые литералы могут иметь специальный синтаксис, чтобы вы знали, какого типа литерал:

//The 'M' in 10000000M means this is a decimal value, rather than int or double.
var accountBalance = 10000000M; 

Что отличает их от переменных или ресурсов, так это то, что компилятор может обращаться с ними как с константами или выполнять определенные оптимизации кода, в котором они используются, потому что он уверен, что они не изменятся.

Литерал — это присвоение явного значения, например

int i = 4;  // i is assigned the literal value of '4'
int j = i   // j is assigned the value of i.  Since i is a variable,  
            //it can change and is not a 'literal'

РЕДАКТИРОВАТЬ:Как уже отмечалось, присваивание само по себе не имеет ничего общего с определением литерала. В моем примере я использовал присваивание, но литерал также можно передать в метод и т. д.

Литерал — это когда вы включаете значение в исходный код (в отличие от ссылки на переменную или константу).Например:

int result = a + 5; // a is a variable with a value, 5 is a literal

string name = "Jeff Atwood"; // name is a variable initialized
                             // with the string literal, "Jeff Atwood"

int[] array = new int[] {1, 2, 3}; // C# has array literals (this is actually three
                                   // int literals within an array literal)

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

const int maxUsers = 100;
const double gravitationalAcceleration = 9.8;

Как правило, единственные числовые литералы, которые я использую (помимо инициализации констант, как указано выше), — это 0 или 1, а иногда и 2, если я пропускаю все остальные элементы в цикле.Если значение числа важнее, чем его фактическое значение ценить (обычно так и есть), лучше назвать это.

Буквальное значение это значение, но значение также может храниться в переменной.В заявлении

string str = "string literal";

есть строковая переменная (str) и строковый литерал.После выполнения оператора они оба имеют одинаковое значение.

Имейте в виду, что во многих языках переменная и буквальное значение не обязательно должны быть одного и того же типа.Например:

int a = 1.0;

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

Другой пример: в первой строке кода C++ выше тип строкового литерала на самом деле не является типом библиотеки. string совсем.Для обеспечения обратной совместимости с C строковые литералы в C++ представляют собой массивы символов.

Быстрый пример:

интервал my_int_var = 723;

723 - Этот набор символов относится к буквальный целочисленное значение.

my_int_var — этот набор символов относится к переменная целочисленное значение.

Литерал — это когда вы помещаете его в код.Итак, строковый литерал

string s = "SomeText";

Это противоположность построению строки или принятию ее в качестве параметра.

Обычно, когда кто-то использует слово «литерал», они имеют в виду, что значение можно расшифровать из кода (текста), как показано во многих примерах в других сообщениях.

Другое распространенное использование — значения, которые преобразуются в непосредственные значения при сборке.Это значения, которые вставляются непосредственно в машинную инструкцию, а не требуют загрузки регистров.

Я слышал, как строковые литералы случайно использовались для обозначения того, что Спецификация С# на самом деле относится к дословным строковым литералам.Обычный строковый литерал позволяет экранировать определенные символы (с префиксом a), например для табуляции.Дословный строковый литерал начинается с @ и обрабатывается дословно, \ не имеет особого значения.

//regular
string regular = "\thello world";
//verbatim
string verbatim = @"C:\";
//the regular equivalent of this would be "C:\\"

Литерал — это «представление данных в исходном коде».

Литералы — это сокращенные обозначения значений определенных типов, которые язык считает настолько важными или фундаментальными, что специально для них выделен синтаксический сахар.

Пример типов, значения которых часто представляются литералами:

Boolean = { true, false }
Integer = { ..., -2, -1, 0, 1, 2, ... }
Character = { 'a', 'b', ... }
String = { "hello", "world", ... }

Некоторые языки имеют литералы даже для типов функций:

Integer -> Integer = { (x: Integer) => x + 2), (x: Integer) => x/2, ...}

Примером значений, которые обычно не представлены литералами, будут значения типов классов:

Car(brand: String, seats: Integer) = { Car("BMW", 5), Car("Ferrari", 2), ...}

Здесь значение Car("BMW", 5) в типе Car действительно однозначно обозначается с использованием последовательности символов, однако значение не представляется с использованием специального сокращенного литерала, а вместо этого использует общие (подробные) понятийные механизмы для обозначения значений любого типа класса.

Термин буквальный является синонимом терминов ценить, пример, постоянный, член, и элемент определенного типа, но несет в себе немного дополнительного значения, которое говорит нам о том, что существует сокращение для его записи.

Мне нравится думать о литералах как о египетских иероглифах, а не как о соединении символов алфавита для выражения концепции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top