Бьерн Страуструп - Тур по С++. Краткий курс
3-е изданиеНазвание: | Тур по С++. Краткий курс | |
Автор: | Бьерн Страуструп | |
Жанр: | C, C++, C# | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | 2022 | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Тур по С++. Краткий курс"
Третье издание. Перевод и редакция Кирюхин В.Е. 2023 год. Настоящее издание представляет собой инициативный перевод замечательной книги по основам программирования на языке С++ за авторством самого создателя языка Бьерна Страуструпа* (Запрещенная организация в РФ). В книге описаны самые современные функции языка соответствующие стандарту C++20, в том числе ещё не полностью реализованные в компиляторах. Так же в книге описаны лучшие методы применения языка С++ с ссылками на C++ Core Guideline. Книга будет полезна как обучающимся, так и практикующим программистам желающим ознакомится с новинками С++.
Читаем онлайн "Тур по С++. Краткий курс". [Страница - 15]
могли бы определить один из них:
template
concept Class = is_class_v || is_union_v;
// unions are classes
227
template
class Smart_pointer {
// ...
T& operator*() const;
T* operator->() const requires Class;
class or a union
};
// -> is defined if and only if T is a
Часто концепт является более общим или просто более подходящим, чем прямое использование предиката типа стандартной библиотеки.
16.4.3 Генераторы типов
Многие функции типа возвращают типы, часто новые типы, которые они вычисляют. Я называю такие функции генераторами типов, чтобы отличать их от предикатов типов. Стандарт предлагает некоторые, например, такие:
Некоторые генераторы типов
R = remove_const_t
R это T с удалением константности (если таковая имеется)
R = add_const_t
R это const T
если T это ссылка U&, R это U иначе T
R = add_lvalue_reference_t если T это lvalue ссылка, R это T иначе T&
R = add_rvalue_reference_t если T это rvalue ссылка, R это T иначе T&&
если b истинно, R это T иначе R не определено
R = enable_if_t
R это T если b истинно; иначе U
R = conditional_t
если существует тип, к которому все T могут быть неявно преR = common_type_t
образованы, R является этим типом; в противном случае R не
определен
если T является перечислением, R является его базовым типом;
R = underlying_type_t
в противном случае ошибка
если T может быть вызван с аргументами A..., R это тип возвраR = invoke_result_t
щаемого значения; иначе ошибка
Функции такого типа обычно используются при реализации утилит, а не непосредственно в коде приложения. Из них enable_if, вероятно, является наиболее распространенным в коде до создания концептов. Например, условно включенный -> для умного
указателя традиционно реализуется примерно так:
R = remove_reference_t
template
class Smart_pointer {
// ...
T& operator*();
enable_if operator->(); // -> is defined if and only if T is a
class
};
Я не нахожу это особенно легким для чтения, а более сложные варианты использования гораздо хуже. Определение enable_if основывается на тонкой языковой функции,
называемой SFINAE (“Сбой замены не является ошибкой”). Посмотрите это (только),
если вам нужно.
16.4.4 Связанные типы
228
Все стандартные контейнеры (§12.8) и все контейнеры, разработанные в соответствии с их шаблоном, имеют некоторые связанные типы, такие как их типы значений и
типы итераторов. В и стандартная библиотека предоставляет имена
для этих:
Некоторе генераторы типов
range_value_t
iter_value_t
iterator_t
Тип диапазона элементов R
Тип элементов на которые указывает итератор T
Тип итаратора диапазона R
16.5 source_location
При записи сообщения трассировки или сообщения об ошибке мы часто хотим вывести данные о местоположении ошибки в исходнике частью этого сообщения. Стандартная библиотека предоставляет source_location для этого:
const source_location loc = source_location::current();
Эта функция current() возвращает значение source_location, описывающее место в исходном коде, где оно появляется. Класс source_location имеет элементы file() и function_name(),
возвращающие строки в стиле C, а элементы line() и column(), возвращающие целые числа
без знака.
Оберните это в функцию, и мы получим хороший первый фрагмент сообщения журнала:
void log(const string& mess = "", const source_location loc = source_location::current())
{
cout = x
ceil(x)
Округление до целого в меньшую сторону --">
Книги схожие с «Тур по С++. Краткий курс» по жанру, серии, автору или названию:
Herbert Schildt - C++: базовый курс Жанр: Программирование: прочее Год издания: 2008 Серия: Изучайте c++ с профессионалами |
Вадим Валериевич Подбельский - Программирование. Базовый курс C#. Учебник для вузов Жанр: C, C++, C# Год издания: 2020 Серия: Высшее образование |
Бьерн Страуструп - Язык программирование С++. Краткий курс Жанр: C, C++, C# Год издания: 2019 |
Игнасио Идальго де Сиснерос - Меняю курс Жанр: Биографии и Мемуары Год издания: 1967 |
Другие книги автора «Бьерн Страуструп»:
Бьерн Страуструп - Дизайн и эволюция C++ Жанр: Другие языки и системы программирования Год издания: 2006 |
Бьерн Страуструп - Язык программирование С++. Краткий курс Жанр: C, C++, C# Год издания: 2019 |
Бьерн Страуструп - Тур по С++. Краткий курс Жанр: C, C++, C# Год издания: 2022 |