2014 dxdy logo

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

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




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


30/01/06
72407
mihaild в сообщении #1363705 писал(а):
например константные объекты можно использовать в нескольких разных выражениях, литералы нет

Вот именно, а сказано наоборот: что якобы к const object возможности обращения меньше.

GAA в сообщении #1363707 писал(а):
Раз значение инициализированной переменной может меняться, то с ней нельзя работать как с постоянной константой.

Что это значит "нельзя"? Объясните, чего с ней нельзя сделать, чего с константой можно?

GAA в сообщении #1363707 писал(а):
const — это ограждение, чтобы ненароком не свалиться.

Извините, я не идиот. Не надо мне повторять раз за разом простейшие банальности. Ответьте лучше на вопрос, сосредоточьтесь и ответьте.

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


10/10/18
739
At Home
mihaild в сообщении #1363705 писал(а):
SergeCpp в сообщении #1363687 писал(а):
Компилятором-линкером при создании exe-файла
В память эти значения по тем адресам, где они будут использоваться, подгружает ОС.
ОС загружает всю секцию сразу (может и по страницам), это не инициализация переменной.

Если речь про run-time CRT initialization (то, что до main; точка входа в заголовке exe), то это уже другое дело, не относящееся к константам, помещённым в exe линкером.

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


12/07/07
4438
Munin в сообщении #1363710 писал(а):
Извините, я не идиот. Не надо мне повторять раз за разом простейшие банальности. Ответьте лучше на вопрос, сосредоточьтесь и ответьте.
Я знаю, что Вы не идиот. И ничего кроме банальностей в теме нет. :) И ответить мне нечего. Если вдруг кто-то найдёт что-то небанальное, то я и сам с интересом почитаю. :)

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


16/07/14
8354
Цюрих
Munin в сообщении #1363710 писал(а):
Вот именно, а сказано наоборот: что якобы к const object возможности обращения меньше.
Было сказано, что "нельзя обратиться к ним [литералам - mihaild] как к обычным константам". Т.е. есть способ обратиться к константам, которым нельзя обратиться к литералам. Т.е. что к константнам возможности обращения больше.
Munin в сообщении #1363710 писал(а):
Объясните, чего с ней нельзя сделать, чего с константой можно?
Есть места, где нужны константы времени компиляции (аргументы шаблонов, размер массива и т.д.). Переменные там использовать нельзя, а константы (точнее constant expressions) - можно.
SergeCpp в сообщении #1363711 писал(а):
это не инициализация переменной
Это спор об определениях, не прописанных в стандарте ИМХО (в стандарте прописано только что будет в переменной, а не кто это туда положит).

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


30/01/06
72407
mihaild в сообщении #1363716 писал(а):
Было сказано, что "нельзя обратиться к ним [литералам - mihaild] как к обычным константам".

Ну не может там стоять "литералам", когда перед этим обсуждались const objects! "К ним" должно быть - к константным объектам.

mihaild в сообщении #1363716 писал(а):
Есть места, где нужны константы времени компиляции (аргументы шаблонов, размер массива и т.д.). Переменные там использовать нельзя, а константы (точнее constant expressions) - можно.

Согласен, но называть ли это "обратиться"?

mihaild в сообщении #1363716 писал(а):
Это спор об определениях

Не совсем: инициализация POD структур и объектов классов с конструкторами проходит по-разному.

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


14/01/11
2916
Munin в сообщении #1363724 писал(а):
Ну не может там стоять "литералам", когда перед этим обсуждались const objects!

Тем не менее речь о них.

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

была непосредственным ответом на предыдущее сообщение:
EUgeneUS в сообщении #1363581 писал(а):
Так "нужные значения, хранящиеся в бинарном образе программы" и есть константы.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 20:30 
Аватара пользователя


11/12/16
13195
уездный город Н
Munin в сообщении #1363672 писал(а):
Когда влезаете, желательно разобраться в контексте разговора. Одно "извините" не помогает.


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

(Оффтоп)

1. Был мой намек ТС, что бывают не только именованные константы ("объекты с константным квалификатором типа").
2. На что ответил уважаемый Sender и чуть позже сообщил:
Sender в сообщении #1363582 писал(а):
Это смотря какой смысл вы вкладываете в это слово. Из тела программы вы не сможете обратиться к ним как к обычным константам.

3. Из контекста следовало, что под "ними" подразумеваются константы, заданные литералами, а под "обычным константам" - именованные константы ("объекты с константным квалификатором типа").
4. Это было подтверждено в сообщении.
5. Из какого контекста можно было понять, что
Munin в сообщении #1363692 писал(а):
Эта фраза подразумевает, что к "обычным константам" (литералам? переменным с квалификатором const?) я как-то смогу обратиться, а к инициализированным переменным - тем же способом не смогу.
не ясно. И похоже, не мне одному.

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


16/07/14
8354
Цюрих
Munin в сообщении #1363724 писал(а):
Ну не может там стоять "литералам", когда перед этим обсуждались const objects! "К ним" должно быть - к константным объектам.
Sender в сообщении #1363580 писал(а):
заполняется нужными значениями, хранящимися в бинарном образе программы
Совсем точно "к ним" - это "к значениям, хранящимся в бинарном образе".
Munin в сообщении #1363724 писал(а):
инициализация POD структур и объектов классов с конструкторами проходит по-разному
По-разному, но и тем и другим занимается пользовательский код. А в data segment значения кладет ядро.

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


11/12/16
13195
уездный город Н
mihaild в сообщении #1363730 писал(а):
По-разному, но и тем и другим занимается пользовательский код. А в data segment значения кладет ядро.


Вообще говоря, константа, заданная литералом, может положиться вообще не в data segment, а в машинный код, как часть команды процессора.

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


30/01/06
72407
mihaild в сообщении #1363730 писал(а):
По-разному, но и тем и другим занимается пользовательский код.

POD статического класса памяти - можно и за счёт загрузчика.

EUgeneUS
mihaild
Ладно, соглашусь, хотя Sender продолжает настаивать на абсурде.

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


10/10/18
739
At Home
mihaild в сообщении #1363684 писал(а):
Sender в сообщении #1363678 писал(а):
Да хотя бы в том, что к объекту, объявленному с константным квалификатором типа, в C вы можете применить операцию взятия адреса, а к литералу, инициализирующему переменную, не можете.
У строкового можно.
Могут быть неожиданные случаи.

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


30/01/06
72407
Интересно, а что думает Стандарт по поводу этого флажка и приведённого примера.

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


02/08/11
6874
Стандарт, как и следует ожидать, индифферентен к этому флажку:
Цитата:
It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.
("this arrays" здесь - это строковые литералы, они в Си имеют тип char[].)

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение26.12.2018, 00:21 


27/08/16
9426
А в плюсах этот пример не скомпилируется, так как строковые литералы там константные. Ещё одна причина даже простые проекты в функциональном стиле писать на плюсах.

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


02/08/11
6874
realeugene в сообщении #1363752 писал(а):
А в плюсах этот пример не скомпилируется
А по-моему скомпилируется. Так как строковые литералы там конечно константные - это верно. Но ещё там есть неявное приведение типа с отбрасыванием этой константности. Ща проверю.

-- 26.12.2018, 05:10 --

Да, онлайн-компиляторы независимо от выбранного стандарта (C++98, 11, 14) выдают только warning вроде такого: deprecated conversion from string constant to 'char*'.

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

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



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

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


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

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