|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
||||||
Стенли Б. Липпман, преобразования в логическихвыражениях29.06.2021, 10:01. Показов 6862. Ответов 60
Метки нет (Все метки)
Из учебника:
при использовании значения типа bool в арифметическом выражении оно всегда преобразуется в 0 или 1. Я написал:
В то же время, если записать: i = 1.5 cout <<i; то выдаст 1 (здесь float преобразуется к int) Кто мне объяснит, почему в одном случае преобразование идёт, а в другом нет?
0
|
||||||
| 29.06.2021, 10:01 | |
|
Ответы с готовыми решениями:
60
Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман[2007]
|
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||
| 29.06.2021, 11:12 | ||
Сообщение было отмечено Walex как решение
РешениеОбъект и значение - отдельные независимые сущности. Операции, производимые над значением, никак не влияют на объект. Чтобы изменить объект, нужно производить операции над самим объектом.
0
|
||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 29.06.2021, 11:23 [ТС] | |
|
Ещё раз, спасибо всем!
Я свою ошибку понял: преобразуется не сама переменная. В определённых условиях преобразуется её значение, которое можно присвоить другой переменной. Но в учебнике Липпмана на этом внимание не концентрируется.
0
|
|
|
|
|
| 29.06.2021, 15:24 | |
|
Некоторая ассоциативная аналогия.
Представьте себе переменную как ящик, в котором хранятся какие-то предметы. Эти предметы могут быть определенного типа - это грубо говоря значения. А на ящиках есть надписи, какие значения могут в них храниться. Это тип переменной. Можно представить себе ящики, к примеру различной формы, так как в них хранятся различные типы. Когда вы приводите тип переменной, то вы как-бы меняете форму ящика, для хранения значений другого типа. Но есть некоторые правила приведения. То есть не все типы переменных вы можете преобразовать из одних в другие. Тип переменной - это только некоторое качество переменной, то есть некоторый вид переменной. А значение - некоторый больше количественный показатель. Добавлено через 21 минуту PS. Саму переменную вы можете, грубо говоря представить как тару для хранения данных. Эта тара подходит для хранения определенного типа данных. Для других данных она не подходит. Чтобы она подходила для хранения других данных, переменную нужно привести к другому типу. При этом точность может потеряться при приведении. К тому-же существуют некоторые правила по которым можно приводить только определенные типы к другим типам данных.
1
|
|
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 01.07.2021, 16:14 [ТС] | |
|
DrOffset,
Ценю ваши знания и квалификацию, поэтому обращаюсь с просьбой лично к вам. Замучился читать и разгадывать подобные перлы из учебника: "Привязка ссылки к константному объекту ничего не говорит о том, является ли сам основной объект константой." И подобное встречается постоянно! Возможно мне досталась пиратская версия с машинным переводом. Вы можете дать ссылку на нормальный учебник Липпмана? Я имею в виду, с нормальным переводом. Или я просто не понимаю, что имеется в виду?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 01.07.2021, 16:22 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 01.07.2021, 16:28 [ТС] | |
|
Видимо, с подобным стилем придётся просто смириться. Но, на взгляд "чайника", первое впечатление, покуда не вник глубоко, не опробовал на компиляторе, смысл фразы звучит так: "если я сделал ссылку на константу, то это не значит, что то, на что я сделал ссылку - это константа"
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||
| 01.07.2021, 16:32 | |||||||
1
|
|||||||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 01.07.2021, 16:35 [ТС] | |
|
Я уже писал вам, что использовал компьютер как печатную машинку. Когда я пишу статьи, я понимаю, что пишу я их не для ровни себе. Поэтому, написав, я ещё раз их перечитываю, стараясь представить себе, что вижу этот материал в первый раз. Многое приходится переделывать.
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 01.07.2021, 16:37 | ||
|
Walex, пример из реальной жизни. Вы живете в доме, и у дома есть название улицы и номер. Вы можете его поменять? Нет. Но городские власти могут. Они могут переименовать улицу и поменять нумерацию домов. Придет рабочий и закрасит старое название, напишет новое.
Получается, что у вас - константная ссылка на номер дома. Вы можете им пользоваться, читать и копировать это число куда хотите. Но изменить не можете. Но это не значит, что никто не может. Добавлено через 1 минуту
0
|
||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
||
| 01.07.2021, 16:47 [ТС] | ||
|
Это я вполне разобрал и понял. Но первым делом понимаешь ссылку, как ссылку на объект "а", а вовсе не на "const int". Вы это разбираете легко, потому что ЗНАЕТЕ. Впрочем, я уже понял, что придётся продираться через подобное. Спасибо за отклик. Ни от кого другого я так легко эту информацию не принял бы и зря продолжал бы поиски нового учебника.
Добавлено через 4 минуты
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 01.07.2021, 17:00 | |||
|
Это выразительное средство для моделирования вполне жизненной ситуации в коде - "вот тебе средство доступа к чему-либо, но менять через него это что-либо нельзя".
0
|
|||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 01.07.2021, 17:18 [ТС] | |
|
Вот, я начинаю новую главу и читаю:
2.4.2. Указатели и спецификатор const Подобно ссылкам, вполне возможно определять указатели, которые указывают на объект константного или неконстантного типа. Вот что здесь написано? Имеется в виду, что это будут указатели ОТ константного или не константного типа (const *int) или это будут указатели на другой какой-то объект (const*int a = &b)? То есть, сами указатели указывают, что они константы либо объект - это константа? После примера со ссылками я уже ни за что не поручусь. Можно не отвечать, думаю, разберусь сам, это я для примера. Добавлено через 14 минут Не могу не поделиться: Липпман, стр 107. В разделе 2.3.2 упоминалось о наличии двух исключений из правила, согласно которому типы указателя и объекта, на который он указывает, должны совпадать. Первое исключение — это возможность использования указателя на константу для указания на неконстантный объект: double dval = 3.14; // dval типа double; ее значение неизменно cptr = &dval; // ok: но изменить dval при помощи cptr нельзя Где здесь константный объект и указатель?! Если вы их мне найдёте, мне останется признать, что я идиот.
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 01.07.2021, 17:20 | |||
|
Вот объясняется что такое объект. Вот объясняется что такое ссылка и что значит "привязать". Будет ли объект считаться константным при доступе через указатель, или не будет, - указывается прямо в типе этого указателя (или ссылки). Вообще, для многих новичков это сложно (указатели и ссылки), так что учебник не при чем. В учебнике написано все предельно понятно, но из-за традиционной сложности восприятия самой концепции вам это сразу не дается. Вы либо справитесь с этим, либо нет. Менять учебник нет смысла, лучше не станет (никто не будет как я пытаться пережевывать это для вас и объяснять на аналогиях).
1
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 01.07.2021, 17:29 | |
|
0
|
|
|
|
|
| 01.07.2021, 17:46 | |
|
int *pa =
* - разименование. в переменной pa - будет храниться значение адреса. Операция взятия адреса &. Вы берете адрес объекта &a - вы взяли адрес объекта. Здесь еще нужно рассмотреть некоторый нюанс const int *pa и int const *pa То есть это сама константа или указатель на константу. Здесь нужно понять является ли сам объект константой или константой является тот адрес по которому хранится объект. И другая сторона - является ли сам указатель константой или он указывает на константный объект. Хорошая идея дать понятные объяснения с примерами. Добавлено через 10 минут Чтобы было проще понять нужно рассмотреть вопрос как происходит выделение памяти под объект и как происходит освобождение памяти выделенной под объект.
1
|
|
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 01.07.2021, 17:56 [ТС] | |
|
доделайте хорошее дело, не оставляйте во тьме!
Вы привели более полную цитату из учебника. Я этот момент видел, но меня сбило следующее: 1)double dval = 3.14; // dval типа double; ее значение неизменно Это здесь причём и почему это оно неизменно? 2)cptr = &dval; Разве этим мы не меняем адрес константного указателя? Такое можно? И что при этом происходит? Добавлено через 9 минут Как и любой другой константный объект, константный указатель следует инициализировать, после чего изменить его значение (т.е. адрес, который он содержит) больше нельзя. Я не верю, что подобные выкрутасы нельзя было изложить проще и яснее.
0
|
|
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
|||
| 01.07.2021, 18:09 | |||
Сообщение было отмечено Walex как решение
Решениеdval нет.cptr - неконстантный указатель. И мы здесь присваиваем новое значение этому неконстантному указателю.
0
|
|||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 01.07.2021, 18:14 | |
|
Walex, ошибка перевода получается. Вот почему лучше читать оригинал. В оригинале пишет что: "dval типа double; ее значение можно изменить".
2
|
|
| 01.07.2021, 18:14 | |
|
Лефоре или Липпман? Липпман или Шилдт Консультации.[Липпман/Лажойе] перегрузка операции ++ (Липпман) Изучение С++11: Липпман или Прата? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|