2014 dxdy logo

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

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




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

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

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

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

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

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

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

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

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

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

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 20:00 
Аватара пользователя
mihaild в сообщении #1363716 писал(а):
Было сказано, что "нельзя обратиться к ним [литералам - mihaild] как к обычным константам".

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

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

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

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

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

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 20:29 
Munin в сообщении #1363724 писал(а):
Ну не может там стоять "литералам", когда перед этим обсуждались const objects!

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

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

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

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 20:30 
Аватара пользователя
Munin в сообщении #1363672 писал(а):
Когда влезаете, желательно разобраться в контексте разговора. Одно "извините" не помогает.


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

(Оффтоп)

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

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

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

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 20:41 
Аватара пользователя
mihaild в сообщении #1363730 писал(а):
По-разному, но и тем и другим занимается пользовательский код. А в data segment значения кладет ядро.


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

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 21:28 
Аватара пользователя
mihaild в сообщении #1363730 писал(а):
По-разному, но и тем и другим занимается пользовательский код.

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

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

 
 
 
 
Сообщение25.12.2018, 22:55 
Аватара пользователя
mihaild в сообщении #1363684 писал(а):
Sender в сообщении #1363678 писал(а):
Да хотя бы в том, что к объекту, объявленному с константным квалификатором типа, в C вы можете применить операцию взятия адреса, а к литералу, инициализирующему переменную, не можете.
У строкового можно.
Могут быть неожиданные случаи.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 23:52 
Аватара пользователя
Интересно, а что думает Стандарт по поводу этого флажка и приведённого примера.

 
 
 
 Re: О константах и перилах
Сообщение26.12.2018, 00:17 
Стандарт, как и следует ожидать, индифферентен к этому флажку:
Цитата:
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 
А в плюсах этот пример не скомпилируется, так как строковые литералы там константные. Ещё одна причина даже простые проекты в функциональном стиле писать на плюсах.

 
 
 
 Re: О константах и перилах
Сообщение26.12.2018, 04:00 
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  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group