Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Оператор reinterpret_castжестко зависит от конкретной машины. Чтобы безопасно использовать оператор reinterpret_cast, следует хорошо понимать, как именно реализованы используемые типы, а также то, как компилятор осуществляет приведение.
В ранних версиях языка С++ явное приведение имело одну из следующих двух форм:
тип ( выражение ); // форма записи приведения в стиле функции
( тип ) выражение ; // форма записи приведения в стиле языка С
В зависимости от используемых типов, приведение старого стиля срабатывает аналогично операторам const_cast, static_castили reinterpret_cast. В случаях, где используются операторы static_castили const_cast, приведение типов в старом стиле позволяет осуществить аналогичное преобразование, что и соответствующий именованный оператор приведения. Но если ни один из подходов не допустим, то приведение старого стиля срабатывает аналогично оператору reinterpret_cast. Например, используя форму записи старого стиля, можно получить тот же результат, что и с использованием reinterpret_cast.
char *pc = (char*) ip; // ip указатель на тип int
Приведение нарушает обычный порядок контроля соответствия типов (см. раздел 2.2), поэтому авторы настоятельно рекомендуют избегать приведения типов. Это особенно справедливо для оператора reinterpret_cast. Такие приведения всегда опасны. Операторы const_castмогут быть весьма полезны в контексте перегруженных функций, рассматриваемых в разделе 6.4. Использование оператора const_castзачастую свидетельствует о плохом проекте. Другие операторы приведения, static_castи dynamic_cast, должны быть необходимы нечасто. При каждом применении приведения имеет смысл хорошо подумать, а нельзя ли получить тот же результат другим способом. Если приведение все же неизбежно, имеет смысл принять меры, позволяющие снизить вероятность возникновения ошибки, т.е. ограничить область видимости, в которой используется приведенное значение, а также хорошо документировать все подобные случаи.
Приведения старого стиля менее очевидны, чем именованные операторы приведения. Поскольку их легко упустить из виду, обнаружить ошибку становится еще трудней.
Упражнение 4.36. С учетом того, что iимеет тип int, a d— double, напишите выражение i *= dтак, чтобы осуществлялось целочисленное умножение, а не с плавающей запятой.
Упражнение 4.37. Перепишите каждое из следующих приведений старого стиля так, чтобы использовался именованный оператор приведения.
int i; double d; const string *ps; char *pc; void *pv;
(a) pv = (void*)ps; (b) i = int(*pc);
(c) pv = &d; (d) pc = (char*)pv;
Упражнение 4.38. Объясните следующее выражение:
double slope = static_cast(j/i);
4.12. Таблица приоритетов операторов
Таблица 4.4. Приоритет операторов
| Порядок и оператор | Действие | Применение | Раздел | |
|---|---|---|---|---|
Л :: |
Глобальная область видимости | :: имя |
7.4.1 | |
Л :: |
Область видимости класса | класс :: имя |
3.2.2 | |
Л :: |
Область видимости пространства имен | пространствоимен :: имя |
3.1 | |
Л . |
Обращение к члену класса | объект . член |
1.5.2 | |
Л -> |
Обращение к члену класса | pointer -> член |
3.4.1 | |
Л [] |
Индексирование | выражение [ выражение ] |
3.5.2 | |
Л () |
Вызов функции | имя ( список_выражений ) |
1.5.2 | |
Л () |
Конструкция type |
тип ( список_выражений ) |
4.11.3 | |
П ++ |
Постфиксный инкремент | l-значение ++ |
4.5 | |
П -- |
Постфиксный декремент | l-значение -- |
4.5 | |
П typeid |
Идентификатор типа | typeid( тип ) |
19.2.2 | |
П typeid |
Идентификатор типа времени выполнения | typeid( выражение ) |
19.2.2 | |
| П Явное приведение | Преобразование типов | cast_имя< тип >( выражение ) |
4.11.3 | |
П ++ |
Префиксный инкремент | ++ l-значение |
4.5 | |
П -- |
Префиксный декремент | -- l-значение |
4.5 | |
П ~ |
Побитовое NOT | ~ выражение |
4.8 | |
П ! |
Логическое NOT | ! выражение |
4.3 | |
П - |
Унарный минус | - выражение |
4.2 | |
П + |
Унарный плюс | + выражение |
4.2 | |
П * |
Обращение к значению | * выражение |
2.3.2 | |
П & |
Обращение к адресу | & l-значение |
2.3.2 | |
П () |
Преобразование типов | ( тип ) выражение |
4.11.3 | |
П sizeof |
Размер объекта | sizeof выражение |
4.9 | |
П sizeof |
Размер типа | sizeof( тип ) |
4.9 | |
П sizeof... |
Размер пакета параметров | sizeof...( имя ) |
16.4 | |
П new |
Создание объекта | new тип |
12.1.2 | |
П new[] |
Создание массива | new тип [ размер ] |
12.1.2 | |
П delete |
Освобождение объекта | delete выражение |
12.1.2 | |
П delete[] |
Освобождение массива | delete[] выражение |
12.1.2 | |
П noexcept |
Способность к передаче | noexcept( выражение ) |
18.1.4 | |
Л ->* |
Указатель на член класса | указатель ->* указатель_на_член |
19.4.1 | |
Л .* |
Указатель на член класса | объект .* указатель_на_член |
19.4.1 | |
Л * |
Умножение | выражение * выражение |
4.2 | |
Л / |
Деление | выражение / выражение |
4.2 | |
Л % |
Деление по модулю (остаток) | выражение % выражение |
4.2 | |
Л + |
Сумма | выражение + выражение |
4.2 | |
Л - |
Разница | выражение - выражение |
4.2 | |
Л << |
Побитовый сдвиг влево | выражение << выражение |
4.8 | |
Л >> |
Побитовый сдвиг вправо | выражение >> выражение |
4.8 | |
Л < |
Меньше | выражение < выражение |
4.3 | |
Л <= |
Меньше или равно | выражение <= выражение |
4.3 | |
Л > |
Больше | выражение > выражение |
4.3 | |
Л >= |
Больше или равно | выражение >= выражение |
4.3 | |
Л == |
Равенство | выражение == выражение |
4.3 | |
Л != |
Неравенство | выражение != выражение |
4.3 | |
Л & |
Побитовый AND | выражение & выражение |
4.8 | |
Л ^ |
Побитовый XOR | выражение ^ выражение |
4.8 | |
Л | |
Побитовый OR | выражение | выражение |
4.8 | |
Л && |
Логический AND | выражение && выражение |
4.3 | |
Л || |
Логический OR | выражение || выражение |
4.3 | |
П ?: |
Условный оператор | выражение ? выражение : выражение |
4.7 | |
П = |
Присвоение | l-значение = выражение |
4.4 | |
П *=, /=, %=, |
Составные операторы присвоения | l-значение += выражение , и т.д. |
4.4 | |
П +=, -=, |
4.4 | |||
П <<=, >>=, |
4.4 | |||
П &=, |=, ^= |
4.4 | |||
П throw |
Передача исключения | throw выражение |
4.6.1 | |
Л , |
Запятая | выражение, выражение |
4.10 |
Резюме
Интервал:
Закладка: