LoveRead.info » Книги » Разная литература » Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

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

288 0 18:03, 26-08-2023
Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
26 август 2023

Книга Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп читать онлайн бесплатно без регистрации

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

    1 ... 306 307 308 309 310 311 312 313 314 ... 337
    Перейти на страницу:
    видимости класса, если оно является именем члена этого класса.

    Область видимости инструкции (statement scope). Имя находится в области видимости инструкции, если оно объявлено в части (...) инструкции for, while, switch или if.

    Область видимости переменной распространяется (исключительно) до конца инструкции, в которой она объявлена. Рассмотрим пример.

    for (int i = 0; i<v.size(); ++i) {

      // переменная i может быть использована здесь

    }

    if (i < 27) // переменная i из инструкции for вышла из области

                // видимости

    Области видимости класса и пространства имен имеют свои имена, поэтому можем ссылаться на их членов извне. Рассмотрим пример.

    void f();  // в глобальной области видимости

    namespace N {

      void f() // в пространстве области видимости N

      {

      int v;   // в локальной области видимости

      ::f();   // вызов глобальной функции f()

      }

    }

    void f()

    {

      N::f();  // вызов функции f(x) из области видимости N

    }

    Что произойдет, если мы вызовем функции N::f() или ::f()? См. раздел A.15.

    A.4.2. Класс памяти

    Существуют три класса памяти (раздел 17.4).

    Автоматическая память (automatic storage). Переменные, определенные в функциях (включая параметры функции), размещаются в автоматической памяти (т.е. в стеке), если они явно не объявлены с помощью ключевого слова static. Автоматическая память выделяется, когда функция вызывается, и освобождается при возвращении управления в вызывающий модуль. Таким образом, если функция (явно или неявно) вызывает сама себя, может существовать несколько копий автоматических данных: по одной копии на каждый вызов (см. раздел 8.5.8).

    Статическая память (static storage). Переменные, объявленные в глобальной области видимости и в области видимости пространства имен, хранятся в статической памяти, как и переменные, явно объявленные с помощью ключевого слова static в функциях и классах. Редактор связей выделяет статическую память до запуска программы.

    Свободная память (куча) (free store (heap)). Объекты, созданные с помощью оператора new, размещаются в свободной памяти.

    Рассмотрим пример.

    vector<int> vg(10); // создается один раз при старте программы

                        // ("до функции main()")

    vector<int>* f(int x)

    {

      static vector<int> vs(x); // создается только при первом

                                // вызове f()

      vector<int> vf(x+x);      // создается при каждом вызове f()

      for (int i=1; i<10; ++i) {

        vector<int> vl(i);      // создается на каждой итерации

        // ...

      }    // переменная v1 уничтожается здесь (на каждой итерации)

      return new vector<int>(vf); // создается в свободной памяти

                                  // как копия переменной vf

    } // переменная vf уничтожается здесь

    void ff()

    {

      vector<int>* p = f(10); // получает вектор от функции f()

      // .. .

      delete p;               // удаляет вектор, полученный от

                              // функции f

    }

    Переменные vg и vs, размещенные в статической памяти, уничтожаются по завершении программы (после функции main()), при условии, что они были созданы.

    Память для членов класса отдельно не выделяется. Когда вы размещаете объект где-то, то нестатические члены размещаются там же (в том же классе памяти, что и сам объект, которому они принадлежат).

    Код хранится отдельно от данных. Например, функция-член не хранится в каждом объекте своего класса; одна ее копия хранится вместе с остальной частью кода программы.

    См. также разделы 14.3 и 17.4.

    A.4.3. Время жизни

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

    Локальные (автоматические) объекты создаются, когда поток выполнения достигает их определения, и уничтожаются при выходе из области видимости.

    Временные объекты создаются конкретным подвыражением и уничтожаются по завершении полного выражения. Полное выражение — это выражение, которое не является подвыражением другого выражения.

    Объекты в пространстве имен и статические члены классов создаются в начале программы (до функции main()) и уничтожаются в конце программы (после функции main()”).

    Локальные статические объекты создаются, когда поток выполнения достигает их определения и (если они были созданы) уничтожаются в конце программы.

    Объекты в свободной памяти создаются оператором new и (необязательно) уничтожаются с помощью оператора delete.

    Временная переменная, связанная с локальной ссылкой, существует столько же, сколько и сама ссылка. Рассмотрим пример.

    const char* string_tbl[] = { "Mozart", "Grieg", "Haydn", "Chopin" };

    const char* f(int i) { return string_tbl[i]; }

    void g(string s){}

    void h()

    {

      const string& r = f(0);  // связываем временную строку

      // с ссылкой r

      g(f(1));                 // создаем временную строку

                               // и передаем ее

      string s = f(2);         // инициализируем s временной строкой

      cout << "f(3): " << f(3) // создаем временную строку

                               // и передаем ее

           << "s: " << s

           << "r: " << r << 'n';

    }

    Результат выглядит следующим образом:

    f(3): Chopin s: Haydn r: Mozart

    Временные строки, сгенерированные при вызовах f(1), f(2) и f(3), уничтожаются в конце выражения, в котором они были созданы. Однако временная строка, сгенерированная при вызове f(0), связана с переменной r и “живет” до конца функции h().

    A.5. Выражения

    В этом разделе описываются операторы языка C++. Мы используем обозначения, которые считаем мнемоническими, например: m — для имени члена; T — для имени типа; p — для выражения, создающего указатель; x — для выражения; v — для выражения lvalue; lst — для списка аргументов. Типы результатов арифметических операций определяются обычными арифметическими преобразованиями (раздел A.5.2.2). Описания, приведенные в этом разделе, касаются только встроенных операторов, а не операторов, которые программист может определить самостоятельно, хотя, определяя свои собственные операторы, следует придерживаться семантических правил, установленных для встроенных операторов (см. раздел 9.6).

    1 ... 306 307 308 309 310 311 312 313 314 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


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

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки