(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

C++11 - removed and deprecated

Все уже в курсе выхода нового стандарта С++11,  А я вот решила написать о том, что из С++ в новой версии было исключено и по каким причинам. Оно, может быть, кажется и не таким важным, как новые возможности, но, как говорится: "Тот, кто не знает истории, обречён на повторение ошибок".

Dynamic exception specifications

 Вы, наверное, знаете, что при объявлении функций можно указать, какие типы исключений эта функция будет генерировать. Ну вот как-то так:
int A() throw(); // не может генерировать исключений
int B() throw(A,B); // может генерировать A или B
int С(); // может генерировать любые исключения

 И казалось бы - всё хорошо, вот только на самом деле:
Функция А может сгенерировать любое исключение
Функция B может сгенерировать любое исключение
Функция С может и вовсе ничего не сгенерировать.
Кому интересно, почему так - может почитать вот эту статью. Я уже молчу о том, что синтаксис функции А абсолютно неинтуитивен - я когда впервые его увидела, решила, что как раз функция A может генерировать любые исключения, а С - никаких. Кроме того, некоторым компиляторам (например, Microsoft Visual C++) на объявления в стиле функции B глубоко плевать - никаких проверок выполнятся не будет, о чём честно предупредит warning.

 Теперь вся эта чехарда убрана и добавлено одно ключевое слово "noexcept", объясняющее, что функция генерировать исключения не может. И всё.

auto_ptr

 Один из видов умных указателей более не будет радовать нас своим присутствием в С++. auto_ptr убран. Задумка auto_ptr была хорошей, вот только на практике оказалось, что люди абсолютно не читают документацию. И хотя на счёт auto_ptr чётко сказано, что его нельзя использовать, например, с STL-коллекциями, все постоянно это делали. А самое плохое, что это приводило к неопределённым результатам. Например, вот такой вот код:
vector<auto_ptr<int> > vi;
//..populate vi
sort(vi.begin(), vi.end(), indirect_less());

 В зависимости от компилятора, ОС, версии STL и фазы луны может работать, не работать или даже вовсе падать. Комитет по стандартизации С++ отчаялся взывать к разуму и заменил auto_ptr на unique_ptr, который в проблемных для auto_ptr случаях ведёт себя вполне определённым образом: либо работает, либо не компилируется. Я думаю, все согласятся, что это значительно более предпочтительное поведение.

Понятие "точка следования"

 О точках следования всегда любили со знанием дела рассуждать любители вопросов "а сколько будет i++ + ++i ?". Ранее стандарт С++ определял, какие операции являются точками следования, а какие нет. Теперь понятие упразднено, хотя по сути ничего не изменилось. Все операции всё-равно делятся на гарантирующие последовательность выполнения определённых действий и не гаранитирующие. Теперь говорят просто "операция последовательна" или "операция не последовательна". Объясняется это изменение какими-то призрачными надеждами на упрощение стандартизации новой модели памяти (о чём вообще идёт речь?) и т.д. Мне кажется - вранье. Просто "точка следования" звучало как-то сильно сложно. :)

Экспорт шаблонов

 Я думаю, мало кто знал или использовал эту фичу. Вот пример:
// File 1:
#include <stdio.h>

static void trace() { printf("File 1\n"); }

// declaration only
export template <class T> T const& min(T const&, T const&);

int main() {
  trace();
  return min(2, 3);
}

// File 2:
#include <stdio.h>

static void trace() { printf("File 2\n"); }

//The definition
export template <class T> T const& min(T const &a, T const &b) {
  trace();
  return a<b ? a : b;
}

 Обратите внимание - в одном файле объявляется шаблонная функция, в другом - реализуется, при этом файлы не включают друг друга и каждый имеет собственную версию функции trace(). Больше по этой теме можно почитать тут. Компания Edison Design Group много лет назад настояла на добавлении этой возможности в стандарт. Им она казалась очень важной, они даже сделали реализацию в собственном компиляторе, правда, кроме них этого не сделал больше никто (хотя их разработку, использовала, например, Borland). Прошло время и EDG признали, что ошиблись. Из стандарта С++11 экспорт шаблонов убрали.

 Удачи всем в изучении нового стандарта, буду очень рада, если статья окажется для кого-то полезной.



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 01.11.2011 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Enterprise Connectors (1 Year term)
Delphi Professional Named User
GFI LanGuard подписка на 1 год (25-49 лицензий)
IBM DOMINO COLLABORATION EXPRESS AUTHORIZED USER ANNUAL SW SUBSCRIPTION & SUPPORT RENEWAL
ZBrush 4R6 Win Commercial Single License ESD
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Вопросы и ответы по MS SQL Server
Проект mic-hard - все об XP - новости, статьи, советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100