Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2014-03-07_c++11 / c++11

.pdf
Скачиваний:
34
Добавлен:
27.03.2015
Размер:
246.18 Кб
Скачать

// стандарт C++11

Открытые студенческие лекции НГТУ

Александр Кромм mmaulwurff@gmail.com

// C++11

/*

Ранее — C++0x.

Принят ISO 12 августа 2011.

Предыдущий стандарт — C++03. */

2

//auto

//Было: auto — спецификатор хранения переменной.

//C++03

for ( std::vector<std::map<int, std::string>>::const_iterator it = container.begin();

it != container.end(); ++it ) { /* ... */ }

//Стало: вывод типов

//C++11

for ( auto it = container.begin();

it != container.end(); ++it )

 

{ /* ... */ }

3

 

//nullptr

//Было: NULL == 0

//Стало: std::nullptr_t nullptr

int* pnt = nullptr; // ok bool flag = nullptr; // ok int num = nullptr; // не ok

4

//range-based for

//нужны begin(), end()

int arr[10];

for ( int i : arr ) { /* ... */ }

std::map<std::string, std::vector<int>> map; for ( const auto &kvp : map )

{ /* ... */ }

5

// override

class Base {

 

 

virtual int

foo(int val) const;

 

};

 

 

class Derived : Base {

 

int foo(int

val) override;

// не ok

int foo(int

val) const override; // ok

int foo(float val) override;

// не ok

};

 

 

6

// final

class Base {

virtual int foo(int val) const final; virtual int bar();

};

class Derived : Base {

int foo(int val) const; // не ok int bar() override final; // ok

};

class DerivedNext : Derived { int bar(); // не ok

};

7

//enum class

//глобальная область видимости

enum OldEnum { YES, NO }; int yes = YES; // ok

enum class Enumeration { ONE, TWO }; int one = Enumeration::ONE; // не ok

Enumeration two = Enumeration::TWO; // ok

enum class TypeEnum : unsigned { HELLO, BYE };

8

//умные указатели

//объект уничтожается,

//когда указатель выходит из области видимости

std::unique_ptr<int> unique;

//разделяемая память. объект уничтожается, когда

//последний указатель выходит из области видимости std::shared_ptr<int> shared;

//ссылается на объект, управляемый shared_ptr,

//но не ведёт подсчёт ссылок

std::weak_ptr<int> weak;

9

//лямбда-функции

//(безымянные локальные функции)

[capture](param) -> ret_type { body } // пример

std::vector<int> some_list{ 1, 2, 3, 4, 5 }; int total = 0;

std::for_each(begin(some_list), end(some_list), [&total](int x) { total += x; });

//http://habrahabr.ru/post/66021/

//https://en.wikipedia.org/wiki/Anonymous_function

10

Соседние файлы в папке 2014-03-07_c++11