Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Правые угловые скобки






    Давайте рассмотрим следующий код:

    list< vector< string> > lvs;

     

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

    А почему это вообще было проблемой? Компилятор состоит из нескольких этапов анализа. Вот самая простая модель:

    · Лексический анализ (создание лексем из символов).

    · Синтаксический анализ (проверка грамматики).

    · Проверка типов (поиск имен типов и выражений).

    В теории, а иногда и на практике, эти этапы четко разделены, так что лексический анализатор, определяющий, что “> > ” является маркером (который обычно означает правый сдвиг или ввод), понятия не имеет о его значении; в частности, он не имеет ни малейшего понятия, ни о шаблонах, ни о вложенном списке аргументов шаблона. Однако чтобы сделать этот пример «корректным», эти три этапа должны как-то взаимодействовать. Ключевое наблюдение, которое привело к решению этой проблемы заключалось в том, что компиляторы С++ выдавали подходящее сообщение об ошибке, а значит уже умели выполнять весь необходимый анализ.

    См. также:

    · Раздел стандарта???

    · [N1757==05-0017] Daveed Vandevoorde: revised right angle brackets proposal (revision 2).

     

    Управление поведением по умолчанию: default и delete

    Сейчас стандартная идиома «запрещения копирования» может быть явно выражена следующим образом:

    class X {

    //...

    X& operator=(const X&) = delete; // Запрет копирования

    X(const X&) = delete;

    };

     

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

    class Y {

    //...

    Y& operator=(const Y&) = default; // Семантика копирования по умолчанию

    Y(const Y&) = default;

    }

    };

     

    Явная спецификация поведения по умолчанию является избыточной. Однако являются редкостью комментарии для операций копирования и (что еще хуже) явно определенные пользователем операции копирования, которые должны вести себя аналогично операциям по умолчанию. Реализация поведения по умолчанию этих операций компилятором обычно проще, менее подвержено ошибкам и часто приводит к лучшему объектному коду.

    Ключевое слово “default” может использоваться с любой функцией для которой компилятор может реализовать поведение по умолчанию. Ключевое слово “delete” может быть использовано с любой функцией. Например, так вы можете запретить нежелательное преобразование типов:

    struct Z {

    //...

    // может быть инициализирован с параметром типа long long






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.