Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Книгу Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!
Шрифт:
Интервал:
Закладка:
const double pi = 3.14159265359;

В некоторых местах, например в метках оператора case (см. раздел 4.4.1.3), язык С++ требует использовать константные выражения, т.е. выражения, имеющие целочисленные значения и состоящие исключительно из констант. Рассмотрим пример.
const int max = 17; // литерал является константным выражением
int val = 19;
max+2 // константное выражение (константа плюс литерал)
val+2 // неконстантное выражение: используется переменная

4.3.2. Операторы
До сих пор мы использовали лишь простейшие операторы. Однако вскоре для выражения более сложных операций нам потребуются намного более широкие возможности. Большинство операторов являются привычными, поэтому мы отложим их подробный анализ на будущее. Перечислим наиболее распространенные операторы.

В выражениях, в которых оператор изменяет операнд, мы использовали имя lval (сокращение фразы “значение, стоящее в левой части оператора присваивания”). Полный список операторов приведен в разделе А.5.
Примеры использования логических операторов && (И), || (ИЛИ) и ! (НЕ) приведены в разделах 5.5.1, 7.7, 7.8.2 и 10.4.

Инкрементацию можно выразить по крайней мере тремя способами:
++a
a+=1
a=a+1
Какой из способов следует предпочесть? Почему? Мы полагаем, что лучшим среди них является первый, ++a, поскольку он точнее остальных отражает идею инкрементации. Он показывает, что мы хотим сделать (добавить к значению переменной a единицу и записать результат в переменную). В целом всегда следует выбирать тот способ записи, который точнее выражает вашу идею. Благодаря этому ваша программа станет точнее, а ее читатель быстрее в ней разберется. Если мы запишем a=a+1, то читатель может засомневаться, действительно ли мы хотели увеличить значение переменной a на единицу. Может быть, мы просто сделали опечатку вместо a=b+1, a=a+2 или даже a=a–1; если же в программе будет использован оператор ++a, то простора для сомнений останется намного меньше. Пожалуйста, обратите внимание на то, что этот аргумент относится к области читабельности и корректности программы, но не к ее эффективности. Вопреки распространенному мнению, если переменная a имеет встроенный тип, то современные компиляторы для выражений a=a+1 и ++a, как правило, генерируют совершенно одинаковые коды. Аналогично, мы предпочитаем использовать выражение a *= scale, а не a = a*scale.
4.3.3. Преобразования
Типы в выражениях можно “смешивать”. Например, выражение 2.5/2 означает деление переменной типа double на переменную типа int. Что это значит? Какое деление выполняется: целых чисел или с плавающей точкой? Целочисленное деление отбрасывает остаток, например 5/2 равно 2. Деление чисел с плавающей точкой отличается тем, что остаток в его результате не отбрасывается; например 5.0/2.0 равно 2.5. Следовательно, ответ на вопрос “Какие числа делятся в выражении 2.5/2: целые или с плавающей точкой?” совершенно очевиден: “Разумеется, с плавающей точкой; в противном случае мы потеряли бы информацию”. Мы хотели бы получить ответ 1.25, а не 1, и именно 1.25 мы и получим. Правило (для рассмотренных нами типов) гласит: если оператор имеет операнд типа double, то используется арифметика чисел с плавающей точкой и результат имеет тип double; в противном случае используется целочисленная арифметика, и результат имеет тип int.

5/2 равно 2 (а не 2.5)
2.5/2 равно 2.5/double(2), т.е. 1.25
'a'+1 означает int('a')+1
Иначе говоря, при необходимости компилятор преобразовывает (“продвигает”) операнд типа int в операнд типа double, а операнд типа char — в операнд типа int. Вычислив результат, компилятор может преобразовать его снова для использования при инициализации или в правой части оператора присваивания. Рассмотрим пример.
double d = 2.5;
int i = 2;
double d2 = d/i; // d2 == 1.25
int i2 = d/i; // i2 == 1
d2 = d/i; // d2 == 1.25
i2 = d/i; // i2 == 1
Будьте осторожны: если выражение содержит числа с плавающей точкой, можно легко забыть о правилах целочисленного деления. Рассмотрим обычную формулу для преобразования температуры по Цельсию в температуру по Фаренгейту: f = 9/5*с+32. Ее можно записать так:
double dc;
cin >> dc;
double df = 9/5*dc+32; // осторожно!
К сожалению, несмотря на вполне логичную запись, это выражение не дает точного преобразования шкалы: значение 9/5 равно 1, а не 1.8, как мы рассчитывали. Для того чтобы формула стала правильной, либо 9, либо 5 (либо оба числа) следует представить в виде константы типа double.
double dc;
cin >> dc;
double df = 9.0/5*dc+32; // лучше
Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.
Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.
- 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
- 2. Просьба отказаться от оскорблений, угроз и запугиваний.
- 3. Просьба отказаться от нецензурной лексики.
- 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.
Надеемся на Ваше понимание и благоразумие. С уважением, администратор knigkindom.ru.
Оставить комментарий
-
Гость Татьяна24 сентябрь 22:20 Как то не очень... Невеста по ошибке. Я не дам тебе развод - Майя Линн
-
Римма24 сентябрь 21:52 Почему главные героинитпкие идиотки? И сюжет не плохой, и написано хорошо. Но как героиня - так дура дурой.... Хозяйка маленького дома, или Любимая для дракона - Кира Рамис
-
Римма20 сентябрь 12:27 Много ненужных пояснений и отступлений. Весь сюжет теряет свою привлекательность. Героиня иногда так тупит, что читать не... Хозяйка приюта для перевертышей и полукровок - Елена Кутукова