Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/64: Рейтинг темы: голосов - 64, средняя оценка - 4.61
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190

Литерал это значение любой переменой, ведь так ?

25.10.2016, 21:13. Показов 12999. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.

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

Как я понимаю, литерал - это значение любой переменной любого типа.
К примеру:

int a1=493 - тут литерал это 493
int a2=20 - тут литерал это 20
bool status=true - тут литерал это true
double x=120.83 - тут литерал это 120.83
char per1='p' - тут литерал это 'p'
char per2="M" - тут литерал это "M"
char array[10] - а тут литерал это array

Я верно понимаю ? значение переменной это литерал ? или только те значения которые объявлены как const являются литералами ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2016, 21:13
Ответы с готовыми решениями:

Смешная ошибка. Java и JavaScript - это не одно и тоже - ведь так?
Всем привет! Недавно спорил с человеком насчёт того, что Java и JavaScript - это не одно и тоже, а !!!АБСОЛЮТНО!!! разные языки...

При каком способе адресации в качестве операнда берется содержимое регистра ? Это Регистровая адресация так ведь?
Привет, вопрос банальный, но боюсь подвоха При каком способе адресации в качестве операнда берется содержимое регистра? Это...

а ведь для кого-то это просто
Правильно поставленный вопрос это наполовину решенная проблема... Но проблема в том,что я не знаю как задать этот вопрос Суть вопроса...

34
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
25.10.2016, 21:26
Литерал - константа без имени.

В вашем списке 3 и 7 не литералы.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
25.10.2016, 21:27
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
Как я понимаю, литерал - это значение любой переменной любого типа.
Литерал - это не "значение переменной". Литерал - совершенно самостоятельная сущность.

У термина "литерал" в С++ как мимимут три значения.

Во-первых, литерал - это лексический элемент исходного текста программы. 10 - это литерал. 20.3f - это литерал. 'a' - это литерал. "Hello" - это литерал. false - это литерал. И т.д.

Во-вторых, строковый литерал ("Hello") порождает объект в статической памяти программы - символьный массив. Этот объект тоже обычно называют литералом.

В-третьих, в современном С++ есть еще литералы, определяемые пользователем, что является самостоятельной темой.
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
25.10.2016, 21:29
TheCalligrapher, разве false не ключевое слово языка?
1
56 / 56 / 31
Регистрация: 24.10.2016
Сообщений: 186
25.10.2016, 21:29
В вашем списке 3 и 7 не литералы.
true и false как раз литералы
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.10.2016, 21:31
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
В вашем списке 3 и 7 не литералы.
true - литерал.

Добавлено через 2 минуты
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
разве false не ключевое слово языка?
И ключевое слово и boolean literal.
2
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.10.2016, 21:32
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
литерал - это
лексема, представляющая значение некоторого типа.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
25.10.2016, 21:33
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
разве false не ключевое слово языка?
Да, ключевое слово. Это однако никак не мешает ему быть булевским литералом.
2
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
25.10.2016, 21:48  [ТС]
TheCalligrapher, т.е. значение переменной не может являться литералом ? Просто...rikimaru2013 сказал следующее: Литерал - константа без имени. В вашем списке 3 и 7 не литералы.

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

Как то все сложно. По простому говоря любые значения в исходном коде являются литералами да ?
К примеру есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int main()
{
srand(time(0));
cout <<"Добро пожаловать в игру 'кости' \n\n";
for(int i=0; i<1; i++) 
{
int a=0;
int b=0;
 
        for(int j=0; j<4; j++)
        {
                cout << "Ходишь ты! \n";
                a=game();
                cout << "Ходит компьютер! \n"; b=compgame();
 
                cout << "Общее количество очков у вас : "<< a<<'\n';
                cout << "Общее количество очков у компьютера: "<< b <<'\n';
        }
if(a<b)cout << "***********Вас выйграл компьютер********** ";
else if(a>b) cout << "*********Вы выйграли********** ";
else cout << "******Ничья******";
 
}
return 0;
В нем все числовые значения и текста выводимые на cout являются литералами, верно ?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
25.10.2016, 21:55
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
В нем все числовые значения и текста выводимые на cout являются литералами, верно ?
http://en.cppreference.com/w/c... iteralType
Requirements
A literal type is any of the following:
possibly cv-qualified void (so that constexpr functions can return void);
(since C++14)
scalar type;
reference type;
an array of literal type;
possibly cv-qualified class type that has all of the following properties:
has a trivial destructor,
is either
an aggregate type,
a type with at least one constexpr (possibly template) constructor that is not a copy or move constructor,
a closure type
(since C++17)
for unions, at least one non-static data member is of non-volatile literal type,
for non-unions, all non-static data members and base classes are of non-volatile literal types.
(since C++17)
all non-static data members and base classes are of non-volatile literal types.
(until C++17)
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
25.10.2016, 21:56
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
В нем все числовые значения и текста выводимые на cout являются литералами, верно ?
Нет, не верно. Еще раз: в терминологии языка С++ литералы живут только в исходном тексте программы (за исключением вышеупомянутой исключительной ситцации со строковыми литералами). Литерал - это один из видов лексем, это термин из области синтаксического анализа исходного текста программы. Ни к каким переменным и их значениям литералы никакого отношения не имеют. Ни на какой cout литералы выводиться не могут.

То, что выводится на cout вы можеет называть как угодно - "значения", "представления значений" и т.п. Можете, если хотите, называть ваш вывод "литералами", но к стандартному значению термина в С++ это никакого отношения иметь не будет.
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.10.2016, 22:01
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ни на какой cout литералы выводиться не могут.
Ну почему же? В вышеприведенном примере операндами оператора << как раз литералы являются.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
25.10.2016, 22:15
Цитата Сообщение от GbaLog- Посмотреть сообщение
"Literal type" - это новая концепция в С++11, которая однако не имеет никакого отношения к термину "literal". Literal type и literal - два разных, не связанных между собой понятия.

Добавлено через 2 минуты
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну почему же? В вышеприведенном примере операндами оператора << как раз литералы являются.
Я, может быть, не понял вопроса. Я говорил именно о том тексте, который появляется на выходе в результате работы оператора <<. Текст на выходе называть литералами было бы неправильно, даже если он "выглядит правильно".
1
25.10.2016, 22:16

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Literal type и literal - два разных, не связанных между собой понятия.
Точно! :pardon:

0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.10.2016, 22:17
Цитата Сообщение от GbaLog- Посмотреть сообщение
A literal type
Не, литеральный тип - это другое.
По стандарту литералами называются следующие лексемы:
There are several kinds of literals.
literal:
integer-literal
character-literal
floating-literal
string-literal
boolean-literal
pointer-literal
user-defined-literal

В примечании сказано, что здесь называют литералами то, что в стандарте Си называется константами:
The term “literal” generally designates, in this International Standard, those tokens that are called “constants” in ISO C.
1
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
25.10.2016, 22:19  [ТС]
TheCalligrapher, обязательно ли нужно понимать что такое литерал чтобы программировать ?
Без понимания смысла что такое литерал я же все равно смогу писать хорошие программы да ?)
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.10.2016, 22:29
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
обязательно ли нужно понимать что такое литерал чтобы программировать ?
Без понимания смысла что такое литерал я же все равно смогу писать хорошие программы да ?)
А вы все никак? Почитайте эту тему перед сном, а потом утречком на свежую голову, и таки все поймете!
Да и вообще, человек, который нынче пишет "чтобы" слитно - интеллектуал по определению! Так что не робейте!

Добавлено через 4 минуты
Кстати, про nullptr еще никто не говорил. Это тоже одновременно и литерал и ключевое слово.
1
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
25.10.2016, 22:31  [ТС]
В википедии сказано https://ru.wikipedia.org/wiki/... 0%BA%D0%B0)

Литерал (англ. literal ) — запись в исходном коде компьютерной программы, представляющая собой фиксированное значение[1]. Литералами также называют представление значения некоторого типа данных[1].

Литералы представляют собой константы, включаемые непосредственно в текст программы, в отличие от прочих элементов языка (констант, переменных)[1]. Литералы не могут быть изменены в тексте программы.
В следующем примере 1 и Кот это литералы, а a1, c и cat — переменные:

C++
1
2
3
int a1 = 1;
int c = a1;
string cat = "Кот";
т.е. грубо говоря, какое-либо значение переменной в исходном тексте (кроме ситуации когда это значение другая переменная) и строки которые нужно выводить через cout или присвоить символьному массиву являются литералами. Но сами переменные или массивы, и типы данных не являются литералами. Вроде понял.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
25.10.2016, 22:33
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
Вроде понял.
Вот вам программа, в которой навалом литералов, но нет ни одной переменной и никакого вывода в cout

C++
1
2
3
4
5
6
7
8
int main()
{
  10;
  2.5 + 6.8;
  "Hello"[2];
  true; false; true || false;
  0xBAADF00D;
}
1
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
25.10.2016, 22:39  [ТС]
TheCalligrapher, а разве так можно писать ?
Нет же никакой логики. Это не значения каких либо переменных, это просто значения. Как это вообще можно использовать ????
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.10.2016, 22:39
Помогаю со студенческими работами здесь

Как сделать так, чтобы вначале менялось значение массива, а потом только это значение проверялось?
Есть: $(document).ready(function() { document.reg.invite.form.submit.disabled = 1; }); var arr=; ...

что делает эта программа распишите пожалуйста? это ведь метод прогонки?
что делает эта программа распишите пожалуйста? это ведь метод прогонки? #include &lt;cstdio&gt; #include &lt;math.h&gt; #include...

Почему это компилируется, ведь под второй массив по идее не выделено в куче памяти
К сожалению на момент создания темы исходника не было под рукой...В общем что значит вот такой способ инициации двухмерного массива: int...

Какое получается значение и тип имеет литерал 3.14e1L
3.14e1L Какое получается значение и тип? смущает суффикс e

нужно создать таблицу из 3 строк и 4 столбцов и заполнить её (любой информацией,это неважно) . Как это можно сделать ?
Здравствуйте.У меня возникла проблема. Помогите пожалуйста!Модуль в понедельник , про таблицы ничего не рассказывали , а преподаватель...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru