|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
||||||
Стенли Б. Липпман, преобразования в логическихвыражениях29.06.2021, 10:01. Показов 6615. Ответов 60
Метки нет (Все метки)
Из учебника:
при использовании значения типа bool в арифметическом выражении оно всегда преобразуется в 0 или 1. Я написал:
В то же время, если записать: i = 1.5 cout <<i; то выдаст 1 (здесь float преобразуется к int) Кто мне объяснит, почему в одном случае преобразование идёт, а в другом нет?
0
|
||||||
| 29.06.2021, 10:01 | |
|
Ответы с готовыми решениями:
60
Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман[2007]
|
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
||
| 01.07.2021, 18:29 [ТС] | ||
|
Додел
Особый вопрос к Azazel-San, я так понимаю, к Саше: вы, я так понял, английским владеете. Мне здесь остаётся понять момент cptr = &dval; // ok: но изменить dval при помощи cptr нельзя Оба операнда - не константы. Почему нельзя изменить? Опять ошибка перевода?
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||||
| 01.07.2021, 18:41 | ||||||
|
Walex,
cptr - указатель на const double. Не стоит путать с константным указателем.Указатель на константу менять можно, но нельзя менять то на что он указывает. Константный указатель менять нельзя, но можно менять то на что он указывает.
0
|
||||||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 01.07.2021, 18:52 [ТС] | |
|
Спасибо! Замечательно просто и понятно изложено! Мне осталось понять, что происходит при присвоении нового значения указателю на константу.
0
|
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 01.07.2021, 18:58 | |
|
Walex, а то и происходит, что при присвоении нового значения указателю на константу меняется, то на что он теперь будет указывать, вот и все.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||||
| 01.07.2021, 19:56 | |||||||||
![]() "Сама константа" было бы так:
Однако, в учебнике вся эта информация есть (ошибки перевода - это конечно плохо и портят впечатление). Просто с этой информацией нужно уметь работать. А то получается вы прочитали главу, потом дошли до констант и забыли что такое объект, я сам это только что наблюдал у вас. Это никаким изложением не исправить. Пишите конспекты, это помогает. Записывайте ключевые тезисы (они выделяются в книге обычно), оставляйте закладки. Сразу же пробуйте писать код, который вам дают в примерах, даже если это пара строк. Нельзя просто взять и прочитать технический учебник как худ. литературу и все понять, это ни у кого не получается. Когда я учился, у меня не было таких хороших книг. У меня была одна единственная книга, которая даже не учебник, а скорее мемуары о языке, от его создателя, на английском (интернета, форумов тогда еще не было, а достать какую-то другую книгу было целым испытанием). Так что ваших претензий к самой книге я не поддерживаю. Перевод - да, местами хромает (как и у любой современной переводной литературы, к сожалению), хочется надеяться, что при перепечатке эти вещи исправляют.
1
|
|||||||||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
||
| 01.07.2021, 21:24 [ТС] | ||
|
Что такое объект - я не забывал. но в коде, например, double *cptr = π - два объекта. И я упорно считал, что когда написано, что указатель указывает на объект, то это "pi". . Мне и в голову не приходило, что это может быть cptr. И в книге об этом разъяснений нет. Потом, наверное, всё станет на свои места. Но я сейчас не знаю, как воспринимать такую информацию.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 01.07.2021, 22:33 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 01.07.2021, 23:03 [ТС] | |
|
Тема сложна для восприятия. Безусловно, раз это общепризнанный учебник, то если по сусекам поскрести, по амбарам помести, то найдётся объяснение всему. Но почему, например, нельзя было, для начала, написать:
1 double val = 3.14; 2 double const* ptr_to_const = &val; // указатель на константу 3 double* const const_ptr = &val; // константный указатель 4 double new_val = 1.1; 5 ptr_to_const = &new_val; // OK 6 сonst_ptr = &new_val; // Нельзя 7*ptr_to_const = new_val; // Нельзя 8*const_ptr = new_val; // OK И на основе этого наглядного примера начать рассказывать все нюансы? Да ещё расширить пример, чтоб действительно, большая часть необходимого сюда вошла. Быть может, вы сразу поняли и запомнили разницу между константным указателем и указателем на константу, а я вот нет. Разница хорошо видна, только если свести всё вместе.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 01.07.2021, 23:14 | ||
|
Walex, вообще предполагается, что вы делаете упражнения и практикуетесь после каждой темы.
Только так обучение будет эффективнее. Вам дают правила, которые вы должны применить, чтобы самому составить такой пример. На мой взгляд - это гораздо лучше. Я на этом форуме видел уже несколько случаев, где человек пытался пойти по вашему пути, в итоге он просто уперся в огромное количество комбинаций и сочетаний, которое не оставляет никаких шансов написать сколько-нибудь полный "наглядный пример". Старайтесь разбирать законы, по которым получаются все эти варианты, а не искать "наглядные примеры" с перечнем всех вариантов, их будет настолько много, что вы утонете в нюансах.
1
|
||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 02.07.2021, 10:01 [ТС] | |
|
Пример из учебника:
const int ci = 42; // нельзя изменить ci; const верхнего уровня const int *p2 = &ci; // нельзя изменить p2; const нижнего уровня Разъясните мне этот момент, пожалуйста! Если бы написали: нельзя изменить *p2 - понятно. Нельзя изменить значение константы. Но p2 - это неконстантный адрес. Его почему менять нельзя? Добавлено через 17 минут P2 уже поменял. Явная опечатка. Можно не отвечать.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 02.07.2021, 10:08 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 02.07.2021, 10:09 [ТС] | |
|
Кто подскажет:
int *p = p3; // ошибка: p3 имеет const нижнего уровня, а p - нет Здесь константа копируется в неконстанту. В чём ошибка?
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 02.07.2021, 10:17 | |||
|
Не думал, что столько опечаток. Хочется верить, что это только потому, что электронная версия пиратская и сделана с ранних экземпляров книжки, а в печатном издании последних редакций это исправили. Добавлено через 7 минут Если указатель имеет const нижнего уровня (const указуемых данных), то скопировать его в указатель, который не имеет const нижнего уровня - нельзя. Это сделано для того, чтобы нельзя было неявно снять защиту неизменности указуемых данных с указателя/ссылки. Т.е. это такая идеология: дать const неконстантным данным через указатель неявно можно, а вот снять - нельзя.
2
|
|||
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 02.07.2021, 10:23 [ТС] | |
|
Спасибо за пояснение. Это на поверхности не лежало. Буду искать не пиратскую копию. А то, если не веришь учебнику, то подобные вещи автоматически считаешь опечаткой.
0
|
|
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
|
| 02.07.2021, 11:17 [ТС] | |
|
0
|
|
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
|
|
| 02.07.2021, 12:15 | |
|
А это сильно нужно: константные указатели, указатели на константы? И часто используется в программировании? Лишняя путаница только для новичков. Переменная есть переменная, она для того и придумана, что-бы её менять. Очень нужна константа - объяви её #define
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 02.07.2021, 12:29 | |
|
alexu_007, используется в профессиональном программировании постоянно, потому что это инструмент снижения сложности (сопровождения и совместной разработки).
Возможно автор не собирается участвовать в крупном проекте, или зарабатывать этим деньги (он не сообщал), но хотя бы разобраться, чтобы потом принять осознанное решение, что ему это не надо - нужно. Чужой код, например библиотечный, который он по-любому будет использовать, даже если просто ограничится домашними поделками, хотя бы надо уметь понимать.
1
|
|
|
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
|
||
| 02.07.2021, 12:40 [ТС] | ||
|
Заранее не завидую своему наставнику. Всегда считал себя занудой. Но сейчас, похоже, я попал в среду зануд по профессии, которые ни единой точки или чёрточки не оставят без внимания. Окажусь ли я достаточно занудным - не знаю.
0
|
||
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
|
|
| 02.07.2021, 12:44 | |
|
0
|
|
| 02.07.2021, 12:44 | |
|
Лефоре или Липпман? Липпман или Шилдт Консультации.[Липпман/Лажойе] перегрузка операции ++ (Липпман) Изучение С++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 мог продолжить
работу без необходимости заново разбираться в. . .
|