2014 dxdy logo

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

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




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


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

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


10/10/18
740
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
2919
Munin в сообщении #1363682 писал(а):
Так это означает, что наоборот, возможности обращаться к обычным константам шире.

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

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


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

Жду примера.

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


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

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

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


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

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


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

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


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

-- Tue 25.12.2018 17:45:16 --

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

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

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



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

Сейчас этот форум просматривают: Dmitriy40


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

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