|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
||||||
Стенли Б. Липпман, преобразования в логическихвыражениях29.06.2021, 10:01. Показов 6619. Ответов 60
Метки нет (Все метки)
Из учебника:
при использовании значения типа bool в арифметическом выражении оно всегда преобразуется в 0 или 1. Я написал:
В то же время, если записать: i = 1.5 cout <<i; то выдаст 1 (здесь float преобразуется к int) Кто мне объяснит, почему в одном случае преобразование идёт, а в другом нет?
0
|
||||||
| 29.06.2021, 10:01 | |
|
Ответы с готовыми решениями:
60
Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман[2007]
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 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
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 01.07.2021, 16:22 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 01.07.2021, 16:28 [ТС] | |
|
Видимо, с подобным стилем придётся просто смириться. Но, на взгляд "чайника", первое впечатление, покуда не вник глубоко, не опробовал на компиляторе, смысл фразы звучит так: "если я сделал ссылку на константу, то это не значит, что то, на что я сделал ссылку - это константа"
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||
| 01.07.2021, 16:32 | |||||||
1
|
|||||||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 01.07.2021, 16:35 [ТС] | |
|
Я уже писал вам, что использовал компьютер как печатную машинку. Когда я пишу статьи, я понимаю, что пишу я их не для ровни себе. Поэтому, написав, я ещё раз их перечитываю, стараясь представить себе, что вижу этот материал в первый раз. Многое приходится переделывать.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 01.07.2021, 16:37 | ||
|
Walex, пример из реальной жизни. Вы живете в доме, и у дома есть название улицы и номер. Вы можете его поменять? Нет. Но городские власти могут. Они могут переименовать улицу и поменять нумерацию домов. Придет рабочий и закрасит старое название, напишет новое.
Получается, что у вас - константная ссылка на номер дома. Вы можете им пользоваться, читать и копировать это число куда хотите. Но изменить не можете. Но это не значит, что никто не может. Добавлено через 1 минуту
0
|
||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
||
| 01.07.2021, 16:47 [ТС] | ||
|
Это я вполне разобрал и понял. Но первым делом понимаешь ссылку, как ссылку на объект "а", а вовсе не на "const int". Вы это разбираете легко, потому что ЗНАЕТЕ. Впрочем, я уже понял, что придётся продираться через подобное. Спасибо за отклик. Ни от кого другого я так легко эту информацию не принял бы и зря продолжал бы поиски нового учебника.
Добавлено через 4 минуты
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 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
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 01.07.2021, 17:20 | |||
|
Вот объясняется что такое объект. Вот объясняется что такое ссылка и что значит "привязать". Будет ли объект считаться константным при доступе через указатель, или не будет, - указывается прямо в типе этого указателя (или ссылки). Вообще, для многих новичков это сложно (указатели и ссылки), так что учебник не при чем. В учебнике написано все предельно понятно, но из-за традиционной сложности восприятия самой концепции вам это сразу не дается. Вы либо справитесь с этим, либо нет. Менять учебник нет смысла, лучше не станет (никто не будет как я пытаться пережевывать это для вас и объяснять на аналогиях).
1
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 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
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|||
| 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: Липпман или Прата? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|