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

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

25.10.2016, 21:13. Показов 13024. Ответов 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
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.10.2016, 22:39
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
т.е. грубо говоря, какое-либо значение переменной
Ну почему обязательно переменной?
Вам нужно понять, что значение - это принадлежность типа, а не переменной.
Литерал - любая
Цитата Сообщение от Mr.X Посмотреть сообщение
лексема, представляющая значение некоторого типа.
1
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
25.10.2016, 22:41  [ТС]
TheCalligrapher, программа причем скомпилировалась и даже запустилась.
Но она ничего не делает и не выводит. В чем суть ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,231
25.10.2016, 22:43
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
Как это вообще можно использовать ????
Никак, наверное. Эта программа ничего полезного не делает. Тем не менее это совершенно корректная программа на С++. И она битком набита литералами.

Добавлено через 1 минуту
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
Но она ничего не делает и не выводит. В чем суть ?
Суть в том, что это пример, иллюстрирующий тот факт, что литералы - самостоятельные сущности.

А говорить, что эта программа "ничего не делает" было бы опрометчивым. Концептуально, она, например, вычисляет сумму 2.5 + 6.8. А то, что эта сумма потом никуда не идет - вопрос отдельный.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.10.2016, 22:44
Цитата Сообщение от Mr.X Посмотреть сообщение
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ни на какой cout литералы выводиться не могут.
Ну почему же? В вышеприведенном примере операндами оператора << как раз литералы являются.
Являются. Но cout выводит не литералы, а их значения.
C++
1
    std::cout << .1e4 << std::endl;
.1e4 - литерал.
1000 - значение литерала.
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.10.2016, 22:49
Цитата Сообщение от castaway Посмотреть сообщение
Цитата Сообщение от Mr.X
Ну почему же? В вышеприведенном примере операндами оператора << как раз литералы являются.

Являются. Но cout выводит не литералы, а их значения.
Не-не, про выводит я ничего не говорил!
1
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
25.10.2016, 22:51  [ТС]
TheCalligrapher, пришел к выводу, что всё отдельно стоящие слова и значения в исходном тексте, что не являются функцией, оператором, переменной, массивом или управляющими символами является литералами. После всего что я прочел мне кажется это логичным
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.10.2016, 23:05
Цитата Сообщение от Mr.X Посмотреть сообщение
Не-не, про выводит я ничего не говорил!
Про "выводит" не говорили, но про "выводит" ответили

Хотя и с TheCalligrapher можно поспорить...
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ни на какой cout литералы выводиться не могут.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
#define COUT( literal ) #literal
 
int main()
{
    std::cout << .1e4 << std::endl;
    std::cout << COUT( .1e4 ) << std::endl;
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,231
25.10.2016, 23:18
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
всё отдельно стоящие слова и значения в исходном тексте, что не являются функцией, оператором, переменной, массивом или управляющими символами является литералами
Определять литералы методом исключения - не самое продуктивное занятие.

В тексте С++ программы, после его обработки препроцессором, есть только следующие типы лексем: идентификаторы, ключевые слова, литералы, операторы, знаки пунктуации.

На этом этапе не надо вводить понятия "функции" или "переменной" - они все сидят в общей категории идентификаторов.

Добавлено через 8 минут
Цитата Сообщение от castaway Посмотреть сообщение
Хотя и с TheCalligrapher можно поспорить...
Не совсем понимаю, как это может использоваться для спора с мной. От того, что у нас на сетчатке нечто выглядит как литерал, совсем не означает, что это нечто является литералом. "Вероломство образов"
2
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
25.10.2016, 23:20  [ТС]
castaway, прошу прощения.
Мне вроде все более менее понятно стало, за исключением одного вопроса.
cout << " ";
или
cout << ' ';

пробелы в этих кавычках являются литералами ?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.10.2016, 23:30
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
пробелы в этих кавычках являются литералами ?
Являются.
0
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
25.10.2016, 23:35  [ТС]
castaway, а если у меня скажем
C++
1
cout << "      ";
6 пробелов, можно ли сказать что в моей программе используется 6 литералов ?
Или все что находится в кавычках считается как один литерал ?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.10.2016, 23:42
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
6 пробелов, можно ли сказать что в моей программе используется 6 литералов ?
Или все что находится в кавычках считается как один литерал ?
Это один строковой литерал.
0
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
25.10.2016, 23:48  [ТС]
Всем кто уделил частичку своего времени огромное спасибо !!!
Особенно профессионалам: castaway, Mr.X и TheCalligrapher
Без вас было б тяжело понять. Более менее все понял, тему можно считать закрытой.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
26.10.2016, 00:20
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не совсем понимаю, как это может использоваться для спора с мной. От того, что у нас на сетчатке нечто выглядит как литерал, совсем не означает, что это нечто является литералом. "Вероломство образов"
Разумеется что при выводе через cout литералом это уже являться не будет. Я лишь имел в виду, что через cout можно передать (вывести) вид литерала на экран.
Я рассчитывал на то что вы это поймёте.

А вообще, это "попахивает" холиваром, который я очень сильно не люблю и не уважаю.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,231
26.10.2016, 00:51
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
пробелы в этих кавычках являются литералами ?
Если говорить о литералах, как лексемах грамматики языка, то литералами тут являются " " и ' '. Именно целиком, вместе с кавычками. Литерал не разбирается на кусочки.

Если говорить об упоминавшемся мною дополнительном значении термина строковый литерал (именно строковый) - т.е. символьный массив в статической памяти - то значением строкового литерала " " является статический массив типа const char[2], содержащий значения пробел и '\0'.

Поэтому вопрос о том, являются ли отдельные пробелы в кавычках литералами несколько бессмыслен. Это все равно, что спрашивать, является ли точка в 25.38 литералом.

Добавлено через 8 минут
Цитата Сообщение от castaway Посмотреть сообщение
Я лишь имел в виду, что через cout можно передать (вывести) вид литерала на экран.
Но я никогда и не утверждал обратного. Тему "искажения" внешнего вида литерала при выводе на экран я не затрагивал вообще. Она, насколько я вижу, была впервые поднята вами же в сообщении #24.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2016, 00:51
Помогаю со студенческими работами здесь

Как сделать так, чтобы вначале менялось значение массива, а потом только это значение проверялось?
Есть: $(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 столбцов и заполнить её (любой информацией,это неважно) . Как это можно сделать ?
Здравствуйте.У меня возникла проблема. Помогите пожалуйста!Модуль в понедельник , про таблицы ничего не рассказывали , а преподаватель...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru