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

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

25.10.2016, 21:13. Показов 12837. Ответов 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
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
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
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
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
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
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
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
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
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru