![]() Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Double g(double);
// ошибка: какая версия g()? auto g1 = bind(g, _1); // ok (но выглядит ужасно) auto g2 = bind((double(*)(double))g, _1);
Существует две версии метода bind(): одна версия показана выше, вторая «устаревшая» - требует явного указания типа возвращаемого значения: // явно указываем тип возвращаемого значения auto f2 = bind< int> (f, 7, 'c', _1); // f(7, 'c', 1.2); int x = f2(1.2);
Необходимость (и широкая популярность) второй версии была обусловлена тем, что первую (более удобную в использовании) версию нельзя было реализовать в С++98. function – это тип, который может хранить практически что угодно, что можно вызвать с помощью синтаксиса вызова метода (...). В частности, результат вызова метода bind можно присвоить типу function. function использовать очень просто. Например: // создаем функтор function< float (int x, int y)> f; // получаем нечто, что можно вызвать с помощью () struct int_div { float operator()(int x, int y) const { return ((float)x)/y; }; }; // присваиваем f = int_div(); // вызываем функор cout < < f(5, 3) < < endl; // спокойно передаем куда-либо std:: accumulate(b, e, 1, f);
Функцию-член можно рассматривать как свободную функцию с одним аргументом. Мы можем рассматривать function, как замену функторов стандартной библиотеки С++98: mem_fun_t, pointer_to_unary_function и т.д. Аналогичным образом, мы можем рассматривать bind(), как замену bind1() и bind2(). См. также:
Unique_ptr · unique_ptr (определен в < memory>) и обеспечивает семантику строгого владения. o Владеет объектом, на который хранит указатель. o Не CopyConstructable и не CopyAssignable, однако MoveConstructible и MoveAssignable. o При собственном удалении (например, при выходе из области видимости (6.7)) уничтожает объект (на который хранит указатель) с помощью заданного метода удаления (с помощью deleter-а). Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer
Каждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM.
SeoHammer делает продвижение сайта прозрачным и простым занятием.
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.
Что умеет делать SeoHammer
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок. — Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта. — Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы). — SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание. SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение · Использование unique_ptr дает: o безопасность исключений при работе с динамически выделенной памятью, o передачу владения динамически выделенной памяти в функцию, o возвращения динамически выделенной памяти из функции, o хранение указателей в контейнерах · «Это то, чем должен был быть auto_ptr» (но который мы не могли реализовать на С++98) unique_ptr реализован главным образом на основе rvalue-ссылок и семантике перемещения. Вот типовой фрагмент небезопасного с точки зрения исключений кода: X* f() { X* p = new X; // делаем что-то еще, возможна генерация исключения Return p; }
Решение заключается в том, чтобы unique_ptr хранил указатель на память в куче: X* f() { // или {new X}, но не = new X unique_ptr< X> p(new X); // делаем что-то еще, возможна генерация исключения
|