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

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

29.06.2021, 10:01. Показов 6862. Ответов 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
 Аватар для qppq
145 / 89 / 23
Регистрация: 31.08.2016
Сообщений: 780
Записей в блоге: 2
29.06.2021, 11:08
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
преобразуете значение переменной к другому типу
извините конечно, двояко как то звучит
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
29.06.2021, 11:12
Лучший ответ Сообщение было отмечено Walex как решение

Решение

Цитата Сообщение от qppq Посмотреть сообщение
извините конечно, двояко как то звучит
Только если вы уже "загрузили" себя какими-то ненужными домыслами.

Объект и значение - отдельные независимые сущности. Операции, производимые над значением, никак не влияют на объект. Чтобы изменить объект, нужно производить операции над самим объектом.
0
 Аватар для qppq
145 / 89 / 23
Регистрация: 31.08.2016
Сообщений: 780
Записей в блоге: 2
29.06.2021, 11:19
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"загрузили" себя какими-то ненужными домыслами.
ага понял, это про автоматитски float в int можно так сказать
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
29.06.2021, 11:23  [ТС]
Ещё раз, спасибо всем!
Я свою ошибку понял: преобразуется не сама переменная. В определённых условиях преобразуется её значение, которое можно присвоить другой переменной. Но в учебнике Липпмана на этом внимание не концентрируется.
0
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
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
Цитата Сообщение от Walex Посмотреть сообщение
Привязка ссылки к константному объекту ничего не говорит о том, является ли сам основной объект константой.
Абсолютно корректная фраза, что в ней вызвало затруднение?
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
Цитата Сообщение от Walex Посмотреть сообщение
"если я сделал ссылку на константу, то это не значит, что то, на что я сделал ссылку - это константа"
Так оно и есть.

C++
1
2
3
int a = 10;
 
const int & ra = a; // если я сделал ссылку на константу, то это не значит, что то, на что я сделал ссылку - это константа
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 минуту
Цитата Сообщение от Walex Посмотреть сообщение
Я уже писал вам, что использовал компьютер как печатную машинку. Когда я пишу статьи, я понимаю, что пишу я их не для ровни себе. Поэтому, написав, я ещё раз их перечитываю, стараясь представить себе, что вижу этот материал в первый раз. Многое приходится переделывать.
Я не понимаю что в данном случае можно переделать? Это просто факт, его по-другому никак не написать, только так.
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 174
01.07.2021, 16:47  [ТС]
Это я вполне разобрал и понял. Но первым делом понимаешь ссылку, как ссылку на объект "а", а вовсе не на "const int". Вы это разбираете легко, потому что ЗНАЕТЕ. Впрочем, я уже понял, что придётся продираться через подобное. Спасибо за отклик. Ни от кого другого я так легко эту информацию не принял бы и зря продолжал бы поиски нового учебника.

Добавлено через 4 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Я не понимаю что в данном случае можно переделать? Это просто факт, его по-другому никак не написать, только так.
Вполне можно было бы снизойти к таким как я и уточнить, что под объектом в данном случае подразумевается "const int". То есть, взглянуть на фразу (и не только эту) глазами "чайника"
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
01.07.2021, 17:00
Цитата Сообщение от Walex Посмотреть сообщение
Вы это разбираете легко, потому что ЗНАЕТЕ
не уверен в этом. Я еще помню, как это было когда я не знал. В целом концепция псевдонима с константным квалификатором никогда лично у меня затруднений не вызывала.
Это выразительное средство для моделирования вполне жизненной ситуации в коде - "вот тебе средство доступа к чему-либо, но менять через него это что-либо нельзя".

Цитата Сообщение от Walex Посмотреть сообщение
что под объектом в данном случае подразумевается "const int"
Под объектом подразумевается любой экземпляр (переменная) объектного типа.
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
Цитата Сообщение от Walex Посмотреть сообщение
Вполне можно было бы снизойти к таким как я и уточнить, что под объектом в данном случае подразумевается "const int"

Вот объясняется что такое объект.


Вот объясняется что такое ссылка и что значит "привязать".

Цитата Сообщение от Walex Посмотреть сообщение
Подобно ссылкам, вполне возможно определять указатели, которые
указывают на объект константного или неконстантного типа.
Написано ровно то, что имеется в виду. У вас может быть указатель на константный объект, а может быть указатель на неконстантный объект.
Будет ли объект считаться константным при доступе через указатель, или не будет, - указывается прямо в типе этого указателя (или ссылки).


Вообще, для многих новичков это сложно (указатели и ссылки), так что учебник не при чем. В учебнике написано все предельно понятно, но из-за традиционной сложности восприятия самой концепции вам это сразу не дается. Вы либо справитесь с этим, либо нет. Менять учебник нет смысла, лучше не станет (никто не будет как я пытаться пережевывать это для вас и объяснять на аналогиях).
Миниатюры
Стенли Б. Липпман, преобразования в логическихвыражениях  
1
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
01.07.2021, 17:29
Цитата Сообщение от Walex Посмотреть сообщение
double dval = 3.14; // dval типа double; ее
значение неизменно
cptr = &dval; // ok: но изменить dval при
помощи cptr нельзя
Где здесь константный объект и указатель?!
Если вы их мне найдёте, мне останется признать, что я идиот.
А что ж вы из контекста-то вырвали код? Там же совсем не так написано:
0
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
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
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
01.07.2021, 18:09
Лучший ответ Сообщение было отмечено Walex как решение

Решение

Цитата Сообщение от Walex Посмотреть сообщение
1)double dval = 3.14; // dval типа double; ее значение неизменно

Это здесь причём и почему это оно неизменно?
Это скорее всего просто опечатка из книги. Сделали копипасту из предыдущего варианта и кусок "ее значение неизменно" забыли убрать. Ничего неизменного в dval нет.

Цитата Сообщение от Walex Посмотреть сообщение
2)cptr = &dval;
Разве этим мы не меняем адрес константного указателя? Такое можно? И что при этом происходит?
Что означает фраза "меняем адрес указателя"?

cptr - неконстантный указатель. И мы здесь присваиваем новое значение этому неконстантному указателю.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
01.07.2021, 18:14
Walex, ошибка перевода получается. Вот почему лучше читать оригинал. В оригинале пишет что: "dval типа double; ее значение можно изменить".
Миниатюры
Стенли Б. Липпман, преобразования в логическихвыражениях  
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.07.2021, 18:14

Лефоре или Липпман?
Доброго времени суток. Как вы считаете, какой книгой лучше воспользоваться для осознания принципов С++? &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: Липпман или Прата?
Поделитесь общими впечатлениями или мнениями по этим двум книгам


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

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