Стенли Липпман - Язык программирования C++. Пятое издание

Здесь есть возможность читать онлайн «Стенли Липпман - Язык программирования C++. Пятое издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2014, ISBN: 2014, Издательство: Издательский дом Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Язык программирования C++. Пятое издание: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Язык программирования C++. Пятое издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Лучшее руководство по программированию и справочник по языку, полностью пересмотренное и обновленное под стандарт С++11!
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com

Язык программирования C++. Пятое издание — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Язык программирования C++. Пятое издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Упражнение 16.44. Используя те же три вызова, что и в первом упражнении, определите типы T, если параметр функции g()объявляется как T(а не Т&&) и как const Т&?

Упражнение 16.45. С учетом следующего шаблона объясните происходящее при вызове функции g()с таким литеральным значением, как 42, и с переменной типа int?

template void g(T&& val) { vector v; }

картинка 60916.2.6. Функция std::move()

Библиотечная функция move()(см. раздел 13.6.1) — хороший пример шаблона, использующего ссылки на r-значение. К счастью, функцию move()можно использовать, не понимая механизма работы используемого ею шаблона. Однако изучение работы функции move()может помочь понять и использовать шаблоны.

В разделе 13.6.2 обращалось внимание на то, что, хотя и нельзя непосредственно привязать ссылку на r-значение к l-значению, функцию move()можно использовать для получения ссылки на r-значение, связанной с l-значением. Поскольку функция move()может получать аргументы, по существу, любого типа, нет ничего удивительного в том, что move()— это шаблон функции.

Как определена функция std::move()

Стандартное определение функции move()таково:

// об использовании typename в типе возвращаемого значения и

// приведении см. раздел 16.1.3

// remove_reference рассматривается в разделе 16.2.3

template

typename remove_reference::type&& move(T&& t) {

// static_cast рассматривается в разделе 4.11.3

return static_cast::type&&>(t);

}

Этот код короток, но сложен. В первую очередь, параметр функции move(), Т&&является ссылкой на r-значение типа параметра шаблона. Благодаря сворачиванию ссылок этот параметр может соответствовать аргументу любого типа. В частности, функции move()можно передать либо l-, либо r-значение:

string s1("hi!"), s2;

s2 = std::move(string("bye!")); // ok: перемещение r-значения

s2 = std::move(s1); // ok: но после присвоения

// значение s1 неопределенно

Как работает функция std::move()

В первом присвоении аргумент функции move()является r-значением, полученным в результате выполнения конструктора string("bye")класса string. Как уже упоминалось, при передаче r-значения ссылочному r-значению параметра функции выведенный из этого аргумента тип является ссылочным типом (см. раздел 16.2.5). Таким образом, в вызове std::move(string("bye!")):

• выведенным типом Tбудет string;

• следовательно, экземпляр шаблона remove_referenceсоздается с типом string;

• тип-член typeкласса remove_referenceбудет иметь тип string;

• типом возвращаемого значения функции move()будет string&&;

• у параметра tфункции move()будет тип string&&;

Соответственно, этот вызов создает экземпляр move, являющийся следующей функцией:

string&& move(string &&t)

Тело этой функции возвращает тип static_cast(t). Типом tуже является string&&, поэтому приведение не делает ничего. Следовательно, результатом этого вызова будет ссылка на r-значение, которое было дано.

Теперь рассмотрим второе присвоение, которое вызывает функцию std::move(s1). В этом вызове аргументом функции move()является l-значение. Поэтому на сей раз:

• выведенным типом Тбудет string&(ссылка на тип string, а не просто string);

• следовательно, экземпляр шаблона remove_referenceсоздается с типом string&;

• тип-член typeкласса remove_referenceбудет иметь тип string;

• типом возвращаемого значения функции move()все еще будет string&&;

• параметр tфункции move()будет создан как экземпляр string& &&, который сворачивается в string&.

Таким образом, этот вызов создает экземпляр шаблона move, который является точно тем, что необходимо для связи ссылки на r-значение с l-значением.

string&& move(string &t)

Тело этого экземпляра возвращает тип static_cast(t). В данном случае типом tявляется string&, который приведение преобразует в тип string&&.

Оператор static_castподдерживает приведение l-значения к ссылке на r-значение

картинка 610Обычно оператор static_castможет выполнить только доступные преобразования (см. раздел 16.3). Однако для ссылок на r-значение есть специальное разрешение: даже при том, что нельзя неявно преобразовать l-значение в ссылку на r-значение, используя оператор static_cast, можно явно привести l-значение к ссылке на r-значение.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Язык программирования C++. Пятое издание»

Представляем Вашему вниманию похожие книги на «Язык программирования C++. Пятое издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Язык программирования C++. Пятое издание»

Обсуждение, отзывы о книге «Язык программирования C++. Пятое издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x