Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
MRG_Serejka
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
Завершенные тесты: 2
1

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

25.10.2016, 21:13. Просмотров 2651. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2016, 21:13
Ответы с готовыми решениями:

что делает эта программа распишите пожалуйста? это ведь метод прогонки?
что делает эта программа распишите пожалуйста? это ведь метод прогонки? #include <cstdio>...

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

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

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

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

34
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
25.10.2016, 22:39 21
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
т.е. грубо говоря, какое-либо значение переменной
Ну почему обязательно переменной?
Вам нужно понять, что значение - это принадлежность типа, а не переменной.
Литерал - любая
Цитата Сообщение от Mr.X Посмотреть сообщение
лексема, представляющая значение некоторого типа.
1
MRG_Serejka
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
Завершенные тесты: 2
25.10.2016, 22:41  [ТС] 22
TheCalligrapher, программа причем скомпилировалась и даже запустилась.
Но она ничего не делает и не выводит. В чем суть ?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5798 / 2792 / 765
Регистрация: 18.10.2014
Сообщений: 5,061
25.10.2016, 22:43 23
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
Как это вообще можно использовать ????
Никак, наверное. Эта программа ничего полезного не делает. Тем не менее это совершенно корректная программа на С++. И она битком набита литералами.

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

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

Являются. Но cout выводит не литералы, а их значения.
Не-не, про выводит я ничего не говорил!
1
MRG_Serejka
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
Завершенные тесты: 2
25.10.2016, 22:51  [ТС] 26
TheCalligrapher, пришел к выводу, что всё отдельно стоящие слова и значения в исходном тексте, что не являются функцией, оператором, переменной, массивом или управляющими символами является литералами. После всего что я прочел мне кажется это логичным
0
castaway
Эксперт С++
4947 / 3053 / 456
Регистрация: 10.11.2010
Сообщений: 11,147
Записей в блоге: 10
Завершенные тесты: 1
25.10.2016, 23:05 27
Цитата Сообщение от 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
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5798 / 2792 / 765
Регистрация: 18.10.2014
Сообщений: 5,061
25.10.2016, 23:18 28
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
всё отдельно стоящие слова и значения в исходном тексте, что не являются функцией, оператором, переменной, массивом или управляющими символами является литералами
Определять литералы методом исключения - не самое продуктивное занятие.

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

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

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

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

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

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

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

Добавлено через 8 минут
Цитата Сообщение от castaway Посмотреть сообщение
Я лишь имел в виду, что через cout можно передать (вывести) вид литерала на экран.
Но я никогда и не утверждал обратного. Тему "искажения" внешнего вида литерала при выводе на экран я не затрагивал вообще. Она, насколько я вижу, была впервые поднята вами же в сообщении #24.
0
26.10.2016, 00:51
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2016, 00:51

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

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

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


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.