Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/30: Рейтинг темы: голосов - 30, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174

Стенли Б. Липпман, преобразования в логическихвыражениях

29.06.2021, 10:01. Показов 6615. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из учебника:

при использовании значения типа bool в арифметическом
выражении оно всегда преобразуется в 0 или 1.

Я написал:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main()
{
    int i = 15;
    if (i)
        cout << i;
    return 0;
}
Как было i = 15, так и осталось.
В то же время, если записать:
i = 1.5
cout <<i;
то выдаст 1 (здесь float преобразуется к int)
Кто мне объяснит, почему в одном случае преобразование идёт, а в другом нет?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2021, 10:01
Ответы с готовыми решениями:

Итераторы Стенли Б. Липпман Язык программирования C++ 5-е издание
Можете переписать данный код используя итераторы. Прост не понимаю где именно должны здесь быть итераторы задача взята из книги Стенли ...

Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман[2007]
Стоит ли читать данную книгу новичку? Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман

Язык программирования C++ Базовый курс Стенли Б. Липпман Жози Лажойе Барбара Э.Му"
Задача из учебника: упражнение 1.20. По адресу http://www.informit.com/title/032174113 в каталоге кода первой главы содержится...

60
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
01.07.2021, 18:29  [ТС]
Студворк — интернет-сервис помощи студентам
Додел
Цитата Сообщение от Azazel-San Посмотреть сообщение
ошибка перевода получается. Вот почему лучше читать оригинал. В оригинале пишет что: "dval типа double; ее значение можно изменить".
Огромное спасибо всем, кто мне помог понять разницу между константным указателем и указателем на константу, что там можно менять, а что нет. Тема, в общем, не сложная, но то, как она изложена в учебнике - сводит с ума.
Особый вопрос к Azazel-San, я так понимаю, к Саше: вы, я так понял, английским владеете. Мне здесь остаётся понять момент

cptr = &dval; // ok: но изменить dval при
помощи cptr нельзя

Оба операнда - не константы. Почему нельзя изменить? Опять ошибка перевода?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
01.07.2021, 18:41
Walex, cptr - указатель на const double. Не стоит путать с константным указателем.
Указатель на константу менять можно, но нельзя менять то на что он указывает.
Константный указатель менять нельзя, но можно менять то на что он указывает.
C++
1
2
3
4
5
6
7
8
9
10
double val = 3.14;
double const* ptr_to_const = &val; // уазатель на константу
double* const const_ptr    = &val; // константный указатель
 
double new_val = 1.1;
ptr_to_const = &new_val; // OK
const_ptr    = &new_val; // Нельзя
 
*ptr_to_const = new_val; // Нельзя
*const_ptr    = new_val; // OK
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
01.07.2021, 18:52  [ТС]
Спасибо! Замечательно просто и понятно изложено! Мне осталось понять, что происходит при присвоении нового значения указателю на константу.
0
Mental handicap
 Аватар для Azazel-San
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
Цитата Сообщение от vvm28 Посмотреть сообщение
int *pa =

* - разименование.
Ну это же не разыменование

Цитата Сообщение от vvm28 Посмотреть сообщение
Здесь еще нужно рассмотреть некоторый нюанс const int *pa и int const *pa
То есть это сама константа или указатель на константу.
Это одно и то же. Эти обе записи означают указатель на константу.

"Сама константа" было бы так:
C++
1
int * const pa = &a;
Добавлено через 25 минут
Цитата Сообщение от Walex Посмотреть сообщение
Замечательно просто и понятно изложено!
Конкретный ответ на вопрос в целом всегда лучше общего описания.
Однако, в учебнике вся эта информация есть (ошибки перевода - это конечно плохо и портят впечатление). Просто с этой информацией нужно уметь работать. А то получается вы прочитали главу, потом дошли до констант и забыли что такое объект, я сам это только что наблюдал у вас. Это никаким изложением не исправить. Пишите конспекты, это помогает. Записывайте ключевые тезисы (они выделяются в книге обычно), оставляйте закладки. Сразу же пробуйте писать код, который вам дают в примерах, даже если это пара строк. Нельзя просто взять и прочитать технический учебник как худ. литературу и все понять, это ни у кого не получается.

Когда я учился, у меня не было таких хороших книг. У меня была одна единственная книга, которая даже не учебник, а скорее мемуары о языке, от его создателя, на английском (интернета, форумов тогда еще не было, а достать какую-то другую книгу было целым испытанием). Так что ваших претензий к самой книге я не поддерживаю. Перевод - да, местами хромает (как и у любой современной переводной литературы, к сожалению), хочется надеяться, что при перепечатке эти вещи исправляют.
1
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
01.07.2021, 21:24  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Однако, в учебнике вся эта информация есть
Безусловно, там всё это есть. И возможности растут. Но это не значит, что нельзя стремиться к лучшему.
Что такое объект - я не забывал. но в коде, например,

double *cptr = &pi; - два объекта.
И я упорно считал, что когда написано, что указатель указывает на объект, то это "pi".
.
Мне и в голову не приходило, что это может быть cptr. И в книге об этом разъяснений нет. Потом, наверное, всё станет на свои места. Но я сейчас не знаю, как воспринимать такую информацию.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.07.2021, 22:33
Цитата Сообщение от Walex Посмотреть сообщение
И в книге об этом разъяснений нет.
Конечно есть. Там до этого был целый параграф про указатели, где все варианты разбирались.
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, вообще предполагается, что вы делаете упражнения и практикуетесь после каждой темы.
Только так обучение будет эффективнее.

Цитата Сообщение от 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
Walex, опять редактура перевода хромает.
В оригинале написано "можно".
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
Цитата Сообщение от Walex Посмотреть сообщение
P2 уже поменял. Явная опечатка. Можно не отвечать.
Найдите оригинал книги и примеры кода смотрите там.
Не думал, что столько опечаток. Хочется верить, что это только потому, что электронная версия пиратская и сделана с ранних экземпляров книжки, а в печатном издании последних редакций это исправили.

Добавлено через 7 минут
Цитата Сообщение от Walex Посмотреть сообщение
int *p = p3; // ошибка: p3 имеет const нижнего уровня, а p - нет
Там выше этого примера дается пояснение.

Если указатель имеет const нижнего уровня (const указуемых данных), то скопировать его в указатель, который не имеет const нижнего уровня - нельзя. Это сделано для того, чтобы нельзя было неявно снять защиту неизменности указуемых данных с указателя/ссылки. Т.е. это такая идеология: дать const неконстантным данным через указатель неявно можно, а вот снять - нельзя.
2
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
02.07.2021, 10:23  [ТС]
Спасибо за пояснение. Это на поверхности не лежало. Буду искать не пиратскую копию. А то, если не веришь учебнику, то подобные вещи автоматически считаешь опечаткой.
0
 Аватар для qppq
145 / 89 / 23
Регистрация: 31.08.2016
Сообщений: 780
Записей в блоге: 2
02.07.2021, 11:06
вот этот момент

C++
1
2
double val = 3.14;
double const* ptr_to_const = &val; // уазатель на константу
val стала константой после объявления указателя?
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
02.07.2021, 11:17  [ТС]
Цитата Сообщение от qppq Посмотреть сообщение
val стала константой после объявления указателя?
val константой не стала. Тонкости языка стали более явными.
Спасибо!
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  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
зарабатывать этим деньги (он не сообщал)
Я собираюсь зарабатывать этим деньги. Поэтому, если есть работа для меня с наставником - буду рад. Такое обучение было бы наилучшим стимулом.
Заранее не завидую своему наставнику.
Всегда считал себя занудой. Но сейчас, похоже, я попал в среду зануд по профессии, которые ни единой точки или чёрточки не оставят без внимания. Окажусь ли я достаточно занудным - не знаю.
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
02.07.2021, 12:44
Цитата Сообщение от Walex Посмотреть сообщение
Заранее не завидую своему наставнику.
От чего же? Он денег с вас срубит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2021, 12:44

Лефоре или Липпман?
Доброго времени суток. Как вы считаете, какой книгой лучше воспользоваться для осознания принципов С++? &quot;Объектно-ориентированное...

Липпман или Шилдт
Знаю, что темы &quot;что читать новичку&quot; создавались уже миллион раз. Я, собственно, многие из прочитал (на этом сайте и на других). Эксперты...

Консультации.[Липпман/Лажойе]
Приветствую. Начал изучение языка C++ с книги Стенли Б.Липпмана и Жози Лажойе &quot;Язык программирование C++. Третье издание&quot;. Про...

перегрузка операции ++ (Липпман)
как можна перегрузить данную операцию #include&lt;iostream&gt; #include&lt;complex&gt; using namespace std; inline complex&lt;double&gt;&amp; ...

Изучение С++11: Липпман или Прата?
Поделитесь общими впечатлениями или мнениями по этим двум книгам


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
интеграция 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 мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru