Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

C++11 — removed and deprecated

C++ *

Все уже в курсе выхода нового стандарта С++11, на Хабре уже было несколько статей о его фичах. А я вот решила написать о том, что из С++ в новой версии было исключено и по каким причинам. Оно, может быть, кажется и не таким важным, как новые возможности, но, как говорится: «Тот, кто не знает истории, обречён на повторение ошибок».
Читать дальше →
Всего голосов 182: ↑177 и ↓5 +172
Просмотры 14K
Комментарии 46

Here be dragons

Блог компании Инфопульс Украина C++ *
Просматривая материалы конференции GoingNative 2012 (которую всем программистам на С++ очень советую посмотреть), я обратил внимание на один пример кода:

#include <iostream>
struct  S { int  n; };
struct  X { X(int) {} };
void f(void*) {
    std::cerr << "Pointer!\n";
}
void f(X) {
    std::cerr << "X! \n";
}
int  main() {
    f(S().n);
}

Сможете ли вы, не подглядывая в ответ, сказать, что напечатает эта программа и самое главное, почему?

Под катом — предположение разработчика Clang из Google о том, почему этот код работает так, как он работает. Еще раз, кто не уловил: разработчик компилятора С++ из Google не знает этого точно, у него всего-лишь есть предположение.
Читать дальше →
Всего голосов 74: ↑63 и ↓11 +52
Просмотры 21K
Комментарии 53

Производительность shared_ptr и C++11: почему я не верю библиотекам

C++ *
Здравствуйте!

Оптимизировал я однажды критический участок кода, и был там boost::shared_ptr… И понял я: не верю я библиотекам, хоть и пишут их дядьки умные.

Детали под катом.
Читать дальше →
Всего голосов 84: ↑72 и ↓12 +60
Просмотры 24K
Комментарии 49

Пользовательские литералы в C++11

Программирование *C++ *
Из песочницы
Tutorial
Более полугода прошло с момента принятия стандарта C++11. В сети можно найти много материалов посвященных новому стандарту, однако большинство из них касаются самых простых возможностей, самых сладких. Я говорю о лямбда-функциях, системе автоматического выведения типов, новых спецификаторах, умных указателях и т.д. Да, это действительно интересные вещи и, можно смело сказать, они одни из самых полезных и часто используемых. Но на них свет клином не сошелся, и новенький C++11 предлагает нам не только их.

Ниже я хочу рассказать о пользовательских литералах — весьма полезном средстве, хоть и не в повседневных целях.
Читать дальше →
Всего голосов 96: ↑94 и ↓2 +92
Просмотры 29K
Комментарии 18

Релиз GCC-4.7

Open source *C++ *Компиляторы *
Сегодня ночью вышел долгожданный GCC 4.7, выпуск которого приурочен к 25-летию проекта.

Долгожданным этот выпуск является прежде всего для программистов C++, так как несет с собой обширную поддержку нового стандарта С++11.
Наиболее заметные нововведения
Всего голосов 66: ↑61 и ↓5 +56
Просмотры 4.3K
Комментарии 33

Замечание по move semantics при операторе return в C++11

C++ *
Из песочницы
Бегло просматривая новый стандарт C++11, решил углубить свое понимание в теме rvalue references. Все, в принципе, замечательно, но есть подводные камни, а именно: некоторая потеря обратной совместимости с С++03.
Читать дальше →
Всего голосов 41: ↑40 и ↓1 +39
Просмотры 14K
Комментарии 25

Не зная брода, не лезь в воду. Часть третья

Блог компании PVS-Studio
Сдвиги
Продолжу рассказы о том, как программисты ходят по краю, даже не подозревая об этом. Поговорим об операциях сдвига <<, >>. Принципы работы операторов сдвига очевидны и многие программисты даже не знают, что их использование согласно стандарту Си/Си++ может приводить к неопределенному или к неуточненному поведению (undefined behaviour/unspecified behavior).
Читать дальше →
Всего голосов 126: ↑113 и ↓13 +100
Просмотры 6.7K
Комментарии 121

Самый правильный безопасный printf

Ненормальное программирование *C++ *
Под катом Вас ждет увлекательная история о том, как я сильно расстроился, познакомившись поближе с пользовательскими литералами (с нового стандарта), но при этом в последствии все же реализовал вышеупомянутую функцию, а также разобрался с constexpr, а позже еще и реабилитировал те самые литералы.
Читать дальше →
Всего голосов 68: ↑62 и ↓6 +56
Просмотры 9.7K
Комментарии 36

Type-rich Programming

Программирование *Совершенный код *C++ *
Посмотрев конференцию GoingNative 2012 решил попытаться описать «best practice» для написания программ в стиле C++11. Планируется цикл статей, кому интересно,
Читать дальше →
Всего голосов 24: ↑12 и ↓12 0
Просмотры 2.2K
Комментарии 20

Алгоритм параллельного поиска максимальных, общих подстрок в двух строках, и его имплементация на C++ (C++11)

Программирование *C++ *Алгоритмы *
Из песочницы
Решил написать статью про алгоритм параллельного поиска максимально возможных пересечений двух строк. К написанию этой статьи меня побудило два желания:

  1. Поделиться со всеми интересным алгоритмом и его реализацией на С++ (стандарт С++11);
  2. Узнать, есть ли у данного алгоритма название и/или формальное описание;

Читать дальше →
Всего голосов 52: ↑45 и ↓7 +38
Просмотры 19K
Комментарии 26

Методы, как first class citizens в C++

Ненормальное программирование *C++ *
На днях, гуляя по багтрекеру gcc наткнулся на интересный баг, в нем используется сразу несколько возможностей C++11:


Анализируя этот баг, я подумал, что теперь можно удобно реализовать методы как first class citizens
Читать дальше →
Всего голосов 38: ↑36 и ↓2 +34
Просмотры 3.3K
Комментарии 6

Частичное применение и каррирование в C++

Ненормальное программирование *Программирование *C++ *
Приветствую.

Уж не знаю, как так вышло, но игрался я на досуге с лямбда-выражениями в С++11 (о которых, к слову, я уже писал статью, снискавшую пару лет назад на удивление достаточно неплохую популярность), и под наркотическим воздействием впечатлением от языка Haskell начал разбираться с такими понятиями, как частичное применение и каррирование в контексте языка С++. И для начала, пожалуй, неплохо бы нам определиться с этими терминами.

Читать дальше →
Всего голосов 57: ↑54 и ↓3 +51
Просмотры 14K
Комментарии 45

«Концепты» на C++

Ненормальное программирование *C++ *
Всем доброго времени суток.

Придумано и написано под влиянием некоторых публикаций Страуструпа на тему концептов в C++.
Захотелось мне однажды необычного — сделать так, чтобы нешаблонные функции/методы на C++ могли принимать в качестве аргумента любой объект, имеющий определенный набор методов, примерно так:
void fn(VectorWrapper<int> x)
{
    for (size_t i = 0; i < x.size(); ++i)
    {
        doSomething(x[i]);
    }
}

::std::vector<int> sv;
QList<int> qv;
OtherSuperVector<int> ov;

fn(sv);
fn(qv);
fn(ov);

Причем сделать это не используя наследование от базового класса.
Как это можно сделать, читайте под катом.
Читать дальше →
Всего голосов 11: ↑8 и ↓3 +5
Просмотры 13K
Комментарии 17

Демонстрация сбоев программы при отсутствии барьеров памяти

C++ *Разработка мобильных приложений *Параллельное программирование *
Джефф Прешинг (Jeff Preshing) опубликовал отличную демонстрацию, как нормальный код C++ возвращает непредсказуемый результат на многоядерных процессорах со слабо упорядоченной обработкой очереди запросов (Weakly-Ordered CPU), то есть на ARM-процессорах. Например, на iPhone или каком-нибудь современном Android-устройстве.

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



Как говорится, наш враг — CPU.
Читать дальше →
Всего голосов 81: ↑74 и ↓7 +67
Просмотры 32K
Комментарии 39

Презентация Герба Саттера про Visual C++ и C++11 на конференции BUILD

C++ *

Фото Channel9

Только что на Channel 9 закончилась презентация Герба Саттера на конференции BUILD в Редмонде. Кому интересен конспект его выступления с последними новостями про Visual C++ и C++11 в целом — прошу под кат.

Читать дальше →
Всего голосов 41: ↑36 и ↓5 +31
Просмотры 16K
Комментарии 27

RAII и делегирующие конструкторы в C++11

C++ *
В этом посте пойдет речь об одной интересной фичи в C++11, которая называется делегирующие конструкторы (delegating constructors): почему она интересна, и как ее можно применить для более эффективного управления ресурсами, т.е. реализации идиомы RAII.

Читать дальше →
Всего голосов 70: ↑68 и ↓2 +66
Просмотры 25K
Комментарии 39

«Универсальные» ссылки в C++11 или T&& не всегда означает «Rvalue Reference»

C++ *
Из песочницы
Не так давно Скотт Майерс (англ. Scott Meyers) — эксперт по языку программирования C++, автор многих известных книг — опубликовал статью, описывающую подробности использования rvalue ссылок в C++11.
На Хабре эта тема еще не поднималась, и как мне кажется, статья будет интересна сообществу.
Оригинал статьи: «Universal References in C++11—Scott Meyers»

«Универсальные» ссылки в C++11


T&& не всегда означает “Rvalue Reference”

Автор: Scott Meyers

Возможно, наиболее важным нововведением в C++11 являются rvalue ссылки. Они служат тем фундаментом, на котором строятся «семантика переноса (англ. move semantics)» и «perfect forwarding». (Вы можете ознакомится с основами данных механизмов в обзоре Thomas’а Becker’а).

Синтаксически rvalue ссылки объявляются также, как и «нормальные» ссылки (теперь называемые lvalue ссылками), за исключением того, что вы используете два амперсанда вместо одного. Таким образом, эта функция принимает параметр типа rvalue-reference-to-Widget:
void f(Widget&& param);

Учитывая, что rvalue ссылки объявляются с помощью “&&”, было бы разумно предположить, что присутствие “&&” в объявлении типа указывает на rvalue ссылку. Но это не так:
Widget&& var1 = someWidget;         // здесь “&&” означает rvalue ссылку

auto&& var2 = var1;                 // здесь “&&” НЕ означает rvalue ссылку

template<typename T>
void f(std::vector<T>&& param);     // здесь “&&” означает rvalue ссылку

template<typename T>
void f(T&& param);                  // здесь “&&” НЕ означает rvalue ссылку
Читать дальше →
Всего голосов 56: ↑53 и ↓3 +50
Просмотры 29K
Комментарии 68

Windows 8: Написание многопоточных приложений для магазина Windows с помощью Intel® Threading Building Blocks

Блог компании Intel Visual Studio *Параллельное программирование *
Tutorial
Как известно, в программном интерфейсе приложений для магазина Windows (Windows Store apps) отсутствуют многие функции работы с потоками, начиная с CreateThread() и заканчивая работой с TLS ключами. И это отличный повод перейти от параллелизма, основанного на системно-зависимых потоках к параллелизму, основанному на задачах. Данный пост излагает пошаговую инструкцию о том, как написать простейший многопоточный пример, который проходит аттестацию для магазина Windows (Windows App Certification Kit validation) и, гипотетически, может быть масштабирован до игрушек космического масштаба. А поскольку используется кроссплатформенная библиотека Intel Threading Building Blocks (Intel TBB, TBB, threadingbuildingblocks.org), то вычислительная часть может быть легко перенесена на другие платформы, и задача будет заключаться только в том, чтобы нарисовать новый красивый графический интерфейс.
Читать дальше →
Всего голосов 29: ↑23 и ↓6 +17
Просмотры 8.7K
Комментарии 22

Лямбда-функции и реализация удобного механизма Callback-ов на C++

C++ *
Из песочницы
В этой статье на примере реализации механизма обратного вызова будет рассмотрена возможности применения лямбда функций в удобной и быстрой форме.
Читать дальше →
Всего голосов 22: ↑14 и ↓8 +6
Просмотры 40K
Комментарии 8