2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
 Re: О константах и перилах
Сообщение25.12.2018, 16:11 
Заслуженный участник
Аватара пользователя


16/07/14
9144
Цюрих
C++ Standard писал(а):
The term “literal” generally designates, in this International Standard, those tokens that are called “constants” in ISO C

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 16:25 
Заслуженный участник
Аватара пользователя


30/01/06
72407
EUgeneUS в сообщении #1363657 писал(а):
Извините, что влезаю.

Когда влезаете, желательно разобраться в контексте разговора. Одно "извините" не помогает.

-- 25.12.2018 16:28:10 --

Dmitriy40 в сообщении #1363661 писал(а):
Munin
Насколько я помню теорию, литерал представляет собой подмножество (один из видов) константного выражения, для краткости именуемого константой.

Если в языке есть отдельное понятие константы, вот это вот "для краткости" перестаёт действовать.

Кроме того, к литералам возможности доступа меньше, чем к языковым константам (константам времени исполнения).

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 16:41 


14/01/11
3037
Munin в сообщении #1363652 писал(а):
Что вы подразумеваете под "обычными константами"?

Объекты, объявленные с константным квалификатором типа. Собственно, с них и началось обсуждение, разве нет?
Munin в сообщении #1363652 писал(а):
Что значит "как к обычным константам", в чём отличие?

Да хотя бы в том, что к объекту, объявленному с константным квалификатором типа, в C вы можете применить операцию взятия адреса, а к литералу, инициализирующему переменную, не можете.
Munin в сообщении #1363652 писал(а):
Какую роль играет уточнение "из тела программы"?

Если вы возьмёте шестнадцатеричный редактор и откроете в нём исполняемый файл программы, в нём все литералы будут как на ладони.

Ну вроде бы это всё technical stuff, который и так всем известен. :-)

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 16:58 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Sender в сообщении #1363678 писал(а):
Да хотя бы в том, что к объекту, объявленному с константным квалификатором типа, в C вы можете применить операцию взятия адреса, а к литералу, инициализирующему переменную, не можете.

Так это означает, что наоборот, возможности обращаться к обычным константам шире. А вы сказали, что уже.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 16:59 
Заслуженный участник
Аватара пользователя


16/07/14
9144
Цюрих
Sender в сообщении #1363678 писал(а):
Да хотя бы в том, что к объекту, объявленному с константным квалификатором типа, в C вы можете применить операцию взятия адреса, а к литералу, инициализирующему переменную, не можете.
У строкового можно.

 Профиль  
                  
 
 
Сообщение25.12.2018, 17:27 
Аватара пользователя


10/10/18
754
At Home
mihaild в сообщении #1363632 писал(а):
Если i глобальная (или была бы статической) - она будет храниться в data сегменте, и инициализируется операционной системой.
Компилятором-линкером при создании exe-файла. Или в секцию отдельную или (при задании опций для объединения секций или опций помещения переменной) в иную секцию. А система эти секции уже загружает по адресам.
https://en.m.wikipedia.org/wiki/Data_segment

Вот хорошая программка для просмотра exe -- PEview: http://wjradburn.com/software/

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 17:28 


14/01/11
3037
Munin в сообщении #1363682 писал(а):
Так это означает, что наоборот, возможности обращаться к обычным константам шире.

Собственно, я это и имел в виду, не знаю, откуда взялась противоположная интерпретация.
Sender в сообщении #1363582 писал(а):
Из тела программы вы не сможете обратиться к ним как к обычным константам.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 17:40 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Эта фраза подразумевает, что к "обычным константам" (литералам? переменным с квалификатором const?) я как-то смогу обратиться, а к инициализированным переменным - тем же способом не смогу.

Жду примера.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 17:43 


14/01/11
3037
Munin в сообщении #1363692 писал(а):
Эта фраза подразумевает, что к "обычным константам" (литералам? переменным с квалификатором const?) я как-то смогу обратиться, а к инициализированным переменным - тем же способом не смогу.

Ни в коем случае. Что же, боюсь, мне остаётся только расписаться в своём бессилии объяснить, что же имелось в виду.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 17:45 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Ну или вы странно используете русский язык.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 17:46 


14/01/11
3037
И в косноязычии, да. :?

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 18:01 
Заслуженный участник


12/07/07
4522
Мне, видимо, как и Sender, показалось, что тема об объектах с «константным квалификатором типа». Догадаться о чём он говорит, мне было легко.
Но раз уж куда-то от темы ушли :)


С точки зрения синтаксиса (смысла для рядового пользователя мне в этом не видно, но вдруг) раньше вроде бы было 6 групп токенов: идентификаторы, ключевые слова, константы, строковые литералы, операторы и прочие разделители [можно глянуть Керниган и Риччи, Справочное руководство, но можно и просто в Сети нагуглить.]. Символьные константы, целые константы, константы с плавающей точкой,… — это константы. Строковые литералы — это не константы (отдельная группа).

У меня нет стандарта.
mihaild в сообщении #1363668 писал(а):
C++ Standard писал(а):
The term “literal” generally designates, in this International Standard, those tokens that are called “constants” in ISO C
Что означает? Строковые литералы объединили с константами? Или я неправильно понимал изначально?

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 18:08 
Заслуженный участник
Аватара пользователя


30/01/06
72407
GAA в сообщении #1363700 писал(а):
Догадаться о чём он говорит, мне было легко.

Тогда, может быть, переведёте мне? Как это переменную нельзя использовать как константу?

Слово "литерал" - означает значение, буквально (literally) присутствующее в тексте программы. То есть, и символьные, и целые, и fp значения (а в разных языках ещё и true, false, nil etc) - это всё литералы. И "строковой литерал" - частный случай литерала. Такова терминология в теории языков программирования примерно со времён Алгола. Если в Стандарте Си использовали не все термины, то это его частное дело. (Несколько особенное значение слово "литерал" имеет в языке Forth, насколько мне известно.)

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 18:31 
Заслуженный участник
Аватара пользователя


16/07/14
9144
Цюрих
SergeCpp в сообщении #1363687 писал(а):
Компилятором-линкером при создании exe-файла
В память эти значения по тем адресам, где они будут использоваться, подгружает ОС. А значения констант, лежащих на стеке, в память по месту использования подгружает пользовательский код.
GAA в сообщении #1363700 писал(а):
Что означает? Строковые литералы объединили с константами?
Что стандарт ISO C использует другую терминологию.
Munin в сообщении #1363702 писал(а):
Как это переменную нельзя использовать как константу?
Изначальная ветка:
EUgeneUS в сообщении #1363581 писал(а):
Так "нужные значения, хранящиеся в бинарном образе программы" и есть константы.
Sender в сообщении #1363582 писал(а):
Из тела программы вы не сможете обратиться к ним как к обычным константам
С учетом дальнейшего обсуждения я бы это перевел как const object и отличаются от литералов - и это правда (например константные объекты можно использовать в нескольких разных выражениях, литералы нет).
GAA в сообщении #1363700 писал(а):
Символьные константы, целые константы, константы с плавающей точкой,… — это константы. Строковые литералы — это не константы (отдельная группа).
Стандарта С под рукой нет, в стандарте C++ вообще нет понятия "константа", есть "константное выражение" (и константный объект).
Строковые литералы - это lvalue, остальные - prvalue.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 18:43 
Заслуженный участник


12/07/07
4522
Munin, а Sender уже объяснил в контексте темы (по крайней мере, начала). :) Инициализированная переменная может менять значение в процессе работы программы, а если её определить с const, то изменение при помощи обращения к идентификатору будет недоступно (компилятор будет ругаться). Раз значение инициализированной переменной может меняться, то с ней нельзя работать как с постоянной константой. (Очевидная мысль, но может можно и глубину там найти. :))
const — это ограждение, чтобы ненароком не свалиться. Ограждение, насколько мне известно, крайне слабенькое. Можно в такую переменную что-то записать при помощи, например, указателя. Может не во всех компиляторах, но в тех с которыми я сталкивался. [Ну и в случае использования const с формальным аргументом функции, компилятор код более быстрый может склепать. Например, некоторые компиляторы не выполняют копирование массива в стек, если он не меняется, а просто создают код читающий значения по адресу. Но это тут откровенный оффтопик.]

-- Tue 25.12.2018 17:45:16 --

mihaild, спасибо. Если не разберусь ещё попробую спросить.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 87 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group