Начать бесплатный период
Searching...
SoBrief
Русский
EnglishEnglish
EspañolSpanish
简体中文Chinese
繁體中文Chinese (Traditional)
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Язык программирования C++
Попробуйте полный доступ на 3 дня
Откройте прослушивание и многое другое!
Продолжить

Ключевые идеи

1. C++: язык для изящных и эффективных абстракций

C++ — это язык, созданный для разработки и использования изящных и эффективных абстракций.

Двойственная природа. C++ задуман как мост между низкоуровневым доступом к аппаратуре и высокоуровневыми предметными областями. Он унаследовал от C эффективность для системного программирования и при этом добавил мощные механизмы абстракции, вдохновлённые Simula. Цель — предоставить язык, который одновременно быстр и выразителен, позволяя программистам напрямую отражать концепции в коде.

  • Прямое отображение на аппаратный уровень
  • Доступные механизмы абстракции
  • Язык общего назначения
  • Смещение в сторону системного программирования

Нулевые накладные расходы. Один из ключевых принципов C++ — «принцип нулевых накладных расходов»: вы не платите за то, что не используете. Особенности языка и базовые абстракции спроектированы так, чтобы быть не менее эффективными, чем вручную написанный код. Это критично для приложений с высокими требованиями к производительности и инфраструктурного ПО.

  • Максимальная эффективность
  • Отсутствие скрытых затрат за неиспользуемые возможности
  • Подходит для ресурсов ограниченных сред

Выражение идей. Язык помогает программистам ясно и прямо выражать идеи в коде. Это значит представлять концепции как типы, отношения — как иерархии или параметризации, а независимые идеи — независимо друг от друга. Поощряется синтез разных стилей программирования для достижения лучших решений.

  • Прямое выражение идей
  • Представление отношений
  • Разделение независимых идей
  • Простые идеи — простым языком

2. Современный C++ (C++11) — это другой уровень

C++ ощущается как совершенно новый язык.

Значительная эволюция. За годы язык претерпел кардинальные улучшения, особенно с выходом стандарта C++11. Эти изменения сделали C++ гораздо более мощным и отточенным инструментом для создания качественного ПО. Современный C++ позволяет яснее, проще и прямее выражать идеи.

  • C++11 против C++98
  • Повышенная выразительность
  • Улучшенная безопасность и производительность

Ключевые возможности. C++11 привнёс множество новшеств, которые фундаментально изменили стиль написания и использования языка. Среди них — поддержка параллелизма, управление ресурсами, обобщённое программирование и синтаксические удобства, снижающие шаблонный код.

  • Поддержка параллелизма (std::thread, std::mutex)
  • Семантика перемещения (std::move, rvalue-ссылки)
  • Умные указатели (unique_ptr, shared_ptr)
  • Лямбда-выражения
  • auto и constexpr
  • Инициализаторы списков

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

3. Классы: основа абстракции

Центральная особенность языка C++ — класс.

Пользовательские типы. Классы — главный механизм создания пользовательских типов, которые напрямую отражают концепции предметной области в коде. Хорошо продуманный набор классов облегчает понимание, анализ и изменение программы.

  • Представление концепций через типы
  • Основа механизмов абстракции
  • Повышение ясности и удобства поддержки кода

Инкапсуляция. Классы позволяют чётко разделять публичный интерфейс (то, что видят и используют пользователи) и приватную реализацию (данные и вспомогательные функции). Это обеспечивает сокрытие данных, гарантирует корректное использование и позволяет менять реализацию без влияния на пользовательский код.

  • Публичный интерфейс
  • Приватная реализация
  • Сокрытие данных
  • Разделение ответственности

Конструкторы и деструкторы. Конструкторы определяют, как объекты инициализируются, гарантируя их валидное состояние при создании. Деструкторы отвечают за очистку при уничтожении объекта, что важно для освобождения ресурсов. Эта пара — фундамент для управления ресурсами, например, в RAII.

  • Гарантированная инициализация
  • Захват ресурсов (конструкторы)
  • Освобождение ресурсов (деструкторы)
  • Инварианты класса

4. Управление ресурсами: RAII и умные указатели

Комбинация конструктора и деструктора лежит в основе многих изящных техник.

Принцип RAII. Resource Acquisition Is Initialization (RAII) — фундаментальный приём в C++, где захват ресурса привязан к инициализации объекта (конструктор), а освобождение — к его уничтожению (деструктор). Это гарантирует правильное управление ресурсами даже при исключениях или досрочном выходе из функций.

  • Захват ресурсов в конструкторах
  • Освобождение ресурсов в деструкторах
  • Автоматическая очистка при выходе из области видимости
  • Безопасность при исключениях

Предотвращение утечек. RAII помогает избежать утечек ресурсов (например, памяти) и других ошибок управления (преждевременное или двойное удаление). Владелец ресурса инкапсулирован в объекте, и компилятор автоматически заботится об очистке.

  • Исключает «голые» new и delete
  • Предотвращает утечки памяти
  • Управляет файлами, блокировками, потоками и др.

Умные указатели. unique_ptr и shared_ptr — стандартные умные указатели, использующие RAII для управления динамической памятью. unique_ptr обеспечивает эксклюзивное владение, shared_ptr — совместное через подсчёт ссылок. Они предпочтительнее сырых указателей для управления объектами в куче.

  • unique_ptr (эксклюзивное владение)
  • shared_ptr (совместное владение)
  • Автоматическое освобождение памяти
  • Избегание ручных вызовов delete

5. Шаблоны: основа обобщённого программирования

Шаблон — это класс или функция, параметризованные типами или значениями.

Параметризация на этапе компиляции. Шаблоны позволяют создавать классы, функции и псевдонимы типов, параметризованные типами, значениями или другими шаблонами. Это даёт возможность писать код, работающий с разными типами без потери производительности.

  • Параметризация типом или значением
  • Полиморфизм на этапе компиляции
  • Генерация кода

Обобщённое программирование. Шаблоны — фундамент обобщённого программирования в C++, ориентированного на создание алгоритмов и структур данных, работающих с любыми типами, удовлетворяющими определённым требованиям (концептам). Это позволяет писать переиспользуемый, типобезопасный и эффективный код.

  • Проектирование универсальных алгоритмов
  • Работа с разными типами
  • Концепты (требования к аргументам)

Эффективность. Шаблоны — механизм времени компиляции, поэтому их использование обычно не влечёт накладных расходов во время выполнения по сравнению с эквивалентным вручную написанным кодом. Это достигается за счёт инлайнинга и вычислений на этапе компиляции.

  • Нулевые накладные расходы во время выполнения
  • Поддержка инлайнинга
  • Вычисления на этапе компиляции

6. Стандартная библиотека: ваш незаменимый набор инструментов

Ни одна серьёзная программа не пишется только на голом языке программирования.

Необходимые компоненты. Стандартная библиотека предоставляет широкий набор фундаментальных компонентов, необходимых почти для любой программы на C++. Это контейнеры, алгоритмы, средства ввода-вывода, утилиты и поддержка параллелизма.

  • Контейнеры (vector, list, map, set)
  • Алгоритмы (sort, find, copy, unique)
  • Потоки ввода-вывода (cin, cout, cerr)
  • Утилиты (pair, tuple, умные указатели, время)
  • Поддержка параллелизма

Основа. Стандартная библиотека написана на самом C++, демонстрируя мощь языка и служа образцом хорошего дизайна. Она является общей базой для других библиотек и приложений, способствуя переносимости и совместимости.

  • Написана на C++
  • Образец хорошего дизайна
  • Способствует переносимости
  • Обеспечивает совместимость

Предпочитайте стандарт. Программистам настоятельно рекомендуется использовать компоненты стандартной библиотеки, а не изобретать велосипед. Стандартные компоненты хорошо спроектированы, оптимизированы, широко доступны и известны, что снижает затраты на поддержку и повышает качество кода.

  • Не изобретайте велосипед
  • Хороший дизайн и оптимизация
  • Широкая доступность и известность

7. Параллелизм: встроенная поддержка многозадачности

Параллелизм — выполнение нескольких задач одновременно — широко используется для повышения пропускной способности (использование нескольких процессоров для одной задачи) или улучшения отзывчивости (одна часть программы работает, пока другая ждёт ответа).

Современная возможность. C++ включает надёжную, переносимую и типобезопасную поддержку параллельного программирования, отвечающую требованиям современных многоядерных процессоров. Это важное новшество стандарта C++11.

  • Встроенная поддержка
  • Переносимость и типобезопасность
  • Ориентация на многоядерные процессоры

Потоки и задачи. Библиотека предоставляет низкоуровневое управление потоками (std::thread) и высокоуровневые абстракции задач (std::future, std::async). Потоки разделяют адресное пространство, что требует аккуратной синхронизации для предотвращения гонок данных.

  • std::thread для системных потоков
  • Общее адресное пространство
  • Задачи на основе потоков (std::async)

Синхронизация. Для управления доступом к общим данным и синхронизации потоков предоставлены мьютексы (std::mutex), условные переменные (std::condition_variable) и атомарные операции для тонкой, безблокировочной синхронизации простых типов.

  • Мьютексы и блокировки
  • Условные переменные
  • Атомарные операции
  • Предотвращение гонок данных

8. Освоение типов и базовых средств

Каждое имя и выражение имеют связанный с ними тип.

Фундаментальные строительные блоки. Понимание встроенных типов C++ (int, double, char, bool), правил объявления переменных, области видимости и базовых управляющих конструкций (if, switch, for, while) — основа всего программирования на C++. Эти элементы унаследованы и расширены из C.

  • Встроенные типы
  • Объявления и область видимости
  • Управляющие конструкции
  • Выражения и операторы

Типобезопасность. C++ — статически типизированный язык, что означает проверку типов на этапе компиляции. Это помогает ловить ошибки заранее. Такие возможности, как auto для вывода типа и constexpr для констант времени компиляции, повышают безопасность и выразительность.

  • Статическая проверка типов
  • Раннее обнаружение ошибок
  • auto для вывода типа
  • constexpr для констант времени компиляции

Указатели и ссылки. C++ предоставляет указатели и ссылки для косвенного доступа к памяти. Хотя это мощные инструменты, они требуют аккуратного управления, особенно при владении ресурсами. Для управления памятью в куче предпочтительнее умные указатели.

  • Указатели и ссылки
  • Косвенный доступ к памяти
  • Умные указатели для владения

9. Сочетание стилей программирования для эффективных решений

Лучшее (наиболее поддерживаемое, читаемое, компактное, быстрое и т. д.) решение большинства нетривиальных задач обычно сочетает в себе элементы разных стилей.

Синтез, а не исключение. C++ создан для поддержки множества стилей программирования: процедурного, абстракции данных, объектно-ориентированного и обобщённого. Особенности языка позволяют использовать их в комбинации, а самые эффективные решения часто объединяют техники из разных парадигм.

  • Процедурное программирование
  • Абстракция данных
  • Объектно-ориентированное программирование
  • Обобщённое программирование

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

  • Язык поддерживает комбинации
  • Избегайте однопарадигменного мышления

Практический дизайн. Эффективное программирование на C++ — это выбор правильных инструментов (особенностей языка, компонентов стандартной библиотеки) из доступного набора и их грамотное сочетание для решения конкретной задачи. Это требует понимания сильных и слабых сторон разных подходов и их взаимодействия.

  • Выбирайте подходящие инструменты
  • Эффективно комбинируйте возможности
  • Сосредоточьтесь на дизайне и техниках

10. Обработка ошибок: исключения и гарантии

Исключения созданы, чтобы передавать информацию об ошибке от места её обнаружения к месту обработки.

Разделение ответственности. Исключения (throw, catch) дают возможность отделить код, обнаруживающий ошибку, от кода, её обрабатывающего. Это особенно важно в больших программах и библиотеках, где обнаружитель не знает, как восстановиться, а обработчик не может легко обнаружить ошибку.

  • throw для сообщения об ошибках
  • catch для их обработки
  • Разделение обнаружения и обработки

Гарантии безопасности исключений. Стандартная библиотека даёт гарантии о состоянии объектов при выбрасывании исключений. Базовая гарантия обеспечивает сохранение инвариантов и отсутствие утечек ресурсов. Сильная гарантия гарантирует, что операция либо успешно выполнится, либо не изменит состояние.

  • Базовая гарантия (нет утечек, валидное состояние)
  • Сильная гарантия (всё или ничего)
  • Спецификатор noexcept

Интеграция с RAII. Обработка исключений тесно связана с RAII. Это гарантирует, что ресурсы, захваченные объектами, корректно освобождаются при разворачивании стека во время распространения исключения, предотвращая утечки и упрощая код очистки.

  • RAII для очистки
  • Вызов деструкторов при разворачивании стека

Обновлено:

Report Issue

Обзор отзывов

4.10 из 5
На основе 4 000+ оценок с Goodreads и Amazon.

Язык программирования C++ — это признанный эталон и настольная книга для всех, кто работает с C++, написанная самим создателем языка. Книга получила высокую оценку за глубокое и всестороннее освещение темы, а также за ценные инсайты, которые она предлагает. Однако многие отмечают, что она не подходит для новичков. Текст насыщен информацией, порой кажется перегруженным и излишне подробным, поэтому лучше использовать её как справочник, а не учебник. Опытные программисты ценят её за техническую глубину и детальный разбор, хотя некоторые критикуют стиль изложения и структуру. Тем не менее, для тех, кто стремится овладеть C++ в совершенстве, эта книга — незаменимый источник знаний. В общем, она считается обязательной для профессионалов, но может стать серьёзным испытанием для начинающих.

Your rating:
4.49
139 оценок
Want to read the full book?

Частые вопросы

1. What is "The C++ Programming Language" by Bjarne Stroustrup about?

  • Comprehensive C++ Reference: The book is a thorough guide to C++, covering every language feature and standard-library component a professional programmer is likely to need.
  • Modern C++ Focus: It emphasizes C++11 and later standards, teaching both foundational and advanced programming techniques, including object-oriented and generic programming.
  • Practical and Theoretical: The book balances practical programming advice with explanations of underlying concepts and design principles, making it suitable for both beginners and advanced programmers.
  • Standard Library Emphasis: It introduces and encourages the use of the C++ standard library to simplify programming tasks and promote efficient, maintainable code.

2. Why should I read "The C++ Programming Language" by Bjarne Stroustrup?

  • Authoritative Guidance: Written by the creator of C++, Bjarne Stroustrup, the book offers deep insights into the language’s design, evolution, and best practices.
  • Up-to-date Content: It covers modern C++ features, including C++11 and beyond, ensuring readers stay current with the language’s evolution and standard library extensions.
  • Focus on Quality Software: The book stresses writing correct, maintainable, and efficient code, with advice on concurrency, memory management, and abstraction.
  • Long-term Resource: It serves as both a tutorial and a reference, making it valuable for ongoing learning and problem-solving.

3. What are the key takeaways from "The C++ Programming Language" by Bjarne Stroustrup?

  • Master Abstraction Mechanisms: The book teaches how to use classes, templates, and the standard library to write expressive, type-safe, and efficient code.
  • Embrace Modern C++: It encourages adopting C++11 features like move semantics, lambdas, and smart pointers for safer and clearer code.
  • Resource Management and RAII: Stroustrup emphasizes Resource Acquisition Is Initialization (RAII) and smart pointers to manage resources and prevent leaks.
  • Combine Programming Styles: Readers learn to effectively mix procedural, object-oriented, and generic programming for robust software design.

4. What are the best quotes from "The C++ Programming Language" by Bjarne Stroustrup and what do they mean?

  • “The purpose of computing is insight, not numbers.” – R. W. Hamming: This quote highlights that programming should aim to provide understanding and clarity, not just process data.
  • “Keep it simple: as simple as possible, but no simpler.” – A. Einstein: Stroustrup uses this to stress the importance of simplicity in concurrent and general programming to avoid unnecessary complexity.
  • “Knowledge is of two kinds. We know a subject ourselves, or we know where we can find information on it.” – Samuel Johnson: This underscores the value of knowing how to learn and where to find information, a crucial skill for programmers.
  • Quotes as Guidance: These quotes are used throughout the book to reinforce key programming philosophies and best practices.

5. What programming styles and abstraction mechanisms does "The C++ Programming Language" by Bjarne Stroustrup support?

  • Four Main Styles: The book covers procedural programming, data abstraction, object-oriented programming, and generic programming, showing how to combine them effectively.
  • Classes and Hierarchies: It explains how classes, inheritance, and polymorphism enable encapsulation and code reuse.
  • Templates and Generic Programming: Templates allow for flexible, type-safe code that can be reused across different types, with support for metaprogramming and compile-time computation.
  • Resource Management: RAII and smart pointers are presented as key tools for safe and efficient resource handling.

6. How does Bjarne Stroustrup define and advise on resource management and RAII in "The C++ Programming Language"?

  • RAII Principle: Resource Acquisition Is Initialization ties resource lifetimes to object lifetimes, ensuring resources are released properly even in the presence of exceptions.
  • Smart Pointers: The book introduces unique_ptr for exclusive ownership, shared_ptr for shared ownership, and weak_ptr to break reference cycles, automating memory management.
  • Avoid Manual Management: Stroustrup advises against manual memory management with raw pointers, recommending standard containers and smart pointers instead.
  • Exception Safety: RAII is essential for writing exception-safe code, preventing resource leaks and simplifying error handling.

7. What are the main features and advice related to concurrency in "The C++ Programming Language" by Bjarne Stroustrup?

  • Memory Model and Data Races: The book explains the C++ memory model and the importance of avoiding data races, detailing how atomic operations and synchronization primitives work.
  • Thread and Task Abstractions: It covers thread creation, joining, detaching, and thread-local storage, but advocates using higher-level abstractions like futures, promises, and async() for safer concurrency.
  • Mutexes and Condition Variables: Mutex types and RAII wrappers like lock_guard and unique_lock are introduced for safe locking, along with condition variables for thread communication.
  • Best Practices: Stroustrup recommends keeping concurrency simple, using standard facilities, and thinking in terms of tasks rather than low-level threads.

8. How does "The C++ Programming Language" by Bjarne Stroustrup explain templates, generic programming, and metaprogramming?

  • Templates for Compile-time Polymorphism: Templates allow writing generic code that works with any type meeting certain requirements, enabling code reuse and efficiency.
  • Concepts and Constraints: The book discusses expressing template argument requirements as concepts and using static_assert and enable_if to enforce constraints and improve error messages.
  • Template Metaprogramming: It introduces compile-time computation using templates, such as type functions, type predicates, and traits, to improve type safety and performance.
  • Variadic Templates: Variadic templates enable functions and classes to accept arbitrary numbers of arguments, supporting advanced patterns like type-safe printf and tuples.

9. What guidance does Bjarne Stroustrup provide on classes, inheritance, and polymorphism in "The C++ Programming Language"?

  • Classes as User-defined Types: Classes encapsulate data and behavior, supporting constructors, destructors, and operator overloading for robust abstractions.
  • Inheritance and Access Control: Derived classes inherit from base classes, with access restrictions to maintain encapsulation and support code reuse.
  • Virtual Functions and Polymorphism: Virtual functions enable run-time polymorphism, allowing correct function dispatch based on actual object types, with virtual destructors ensuring proper cleanup.
  • Interface vs. Implementation Inheritance: The book distinguishes between interface inheritance (abstract classes) and implementation inheritance, advocating their separation for flexibility and maintainability.

10. How does "The C++ Programming Language" by Bjarne Stroustrup cover the C++ Standard Library, including containers and algorithms?

  • Container Categories: The book details sequence containers (vector, list, deque), associative containers (map, set, unordered_map), and adaptors (stack, queue), advising vector as the default choice.
  • Algorithms and Iterators: STL algorithms operate on iterator pairs, supporting generic programming and container-independent code, with iterator categories affecting algorithm efficiency.
  • Smart Pointers and Resource Management: Standard smart pointers (unique_ptr, shared_ptr, weak_ptr) are covered for safe and automatic resource management.
  • String and I/O Facilities: std::string and I/O streams are presented as safer, more flexible alternatives to C-style strings and I/O, with support for formatting, locales, and user-defined types.

11. What advice does Bjarne Stroustrup give for error handling, exceptions, and writing robust code in "The C++ Programming Language"?

  • Exceptions for Error Propagation: The book advocates using exceptions to report errors, allowing structured error handling and recovery.
  • RAII for Exception Safety: Resource management via RAII ensures resources are released even when exceptions occur, preventing leaks.
  • Exception Safety Guarantees: Stroustrup distinguishes between basic, strong, and nothrow guarantees, encouraging designs that maintain valid program states during exceptions.
  • Minimize Try-blocks: He recommends keeping try-blocks minimal and catching exceptions by reference, letting main() handle uncaught exceptions for program stability.

12. How does "The C++ Programming Language" by Bjarne Stroustrup address compatibility with C and best practices for modern C++?

  • C++ as a Superset: The book explains that C++ is mostly a superset of C, but with stronger type checking and some incompatibilities.
  • Porting and Coexistence: It provides advice for porting code, using extern "C" for interoperability, and writing in the common subset when needed.
  • Avoid Deprecated Features: Stroustrup warns against using deprecated features like auto_ptr and C++98 exception specifications, recommending modern alternatives.
  • Embrace Modern C++: The book encourages using standard containers, smart pointers, and language features for safer, more maintainable, and portable code.

Об авторе

Бьёрн Страуструп — датский учёный в области информатики, прославившийся как создатель языка программирования C++. В 1979 году, работая в Bell Labs, он поставил перед собой задачу усовершенствовать язык C, добавив возможности для масштабного программирования. Страуструп сыграл ключевую роль в развитии C++, написав несколько изданий книги «Язык программирования C++» и участвуя в формировании стандарта ISO C++. За свои достижения он удостоен множества наград, включая премию IEEE Computer Society за предпринимательские заслуги в области компьютерных технологий. Страуструп занимал должности в Техасском университете A&M и Колумбийском университете, продолжая влиять на развитие информатики и проектирование языков программирования.

Другие книги автора Бьярне Страуструп

Follow
Слушать
Now playing
Язык программирования C++
0:00
-0:00
Now playing
Язык программирования C++
0:00
-0:00
1x
Queue
Home
Swipe
Library
Get App
Try Full Access for 3 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Сегодня: мгновенный доступ
Слушайте полные саммари 26 000+ книг. Это более 12 000 часов аудио!
День 2: напоминание о пробном периоде
Мы отправим вам уведомление об окончании пробного периода.
День 3: начало подписки
Оплата будет списана Jul 3,
отмените в любой момент до этой даты.
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
600,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 3-Day Free Trial
3 days free, then $44.99/year. Cancel anytime.
Unlock a world of fiction & nonfiction books
26,000+ books for the price of 2 books
Read any book in 10 minutes
Discover new books like Tinder
Request any book if it's not summarized
Read more books than anyone you know
#1 app for book lovers
Lifelike & immersive summaries
30-day money-back guarantee
Download summaries in EPUBs or PDFs
Cancel anytime in a few clicks
Scanner
Find a barcode to scan

We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel