SlideShare a Scribd company logo
1 of 21
Download to read offline
C++
на стероиди
Николай Николов • 08.11.2015
“Programming is thinking, not typing.”
Casey Patton
2002
Започва работата
по C++0x
2003
“Бъг фикс” на ISO C++
Няма промяна в езика от
гледна точка на програмиста
2011
Публикуван е
стандарта C++11
Множество промени в
езика
2014
Публикуван е
стандарта C++14
2015
Работа по C++17
Приблизително 4,4 млн
потребителя на езика
auto
int func();
auto f = func(); // f е int
std::vector<int> v;
auto e = v.end(); // std::
vector<int>>::iterator
Типът автоматично се извлича при
инициализацията.
auto променлива не може да остане не
инициализирана.
Type deduction (Effective Modern C++).
range-based
цикли
std::list<std::string> list;
for( auto &s: list ) {
s.clear();
}
int sum = 0;
for( auto n: { 1, 2, 3, 4 } ) {
sum += n;
}
int a[] = {0, 1, 2, 3, 4, 5};
for(int n: a) {
std::cout << n << ' ';
}
Изпълпълнява цикъл върху контейнер.
{
auto && __range = range_expression;
for (auto __begin = begin_expr,
__end = end_expr;
__begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}
ламбда изрази
int var;
auto lam = [&var]( int param ) ->
bool {
return var == param;
}
if( lam(5) ) {
…
}
Конструира безименен функционален
обект, който може да прихваща
променливи.
Особено удобни за употреба заедно с
функциите, предоставени от <algorithm>.
Могат да се използват като слотове в
Qt5.
C++14 добавя генерализирани ламбда
изрази и възможност за изрази при
прихващенето.
constexpr constexpr int v = 10;
constexpr int make_value( int k ) {
return k + v;
}
class Point {
public:
constexpr Point( int _x, int _y )
noexcept: x{_x}, y{_y} {}
private:
int x;
int y;
};
Показва, че променливата или
функцията може да се използва в
константен израз.
Константните изрази се изпълняват по
време на компилация.
user-defined
literals constexpr uint64_t operator"" _KB (
unsigned long long int val )
{
return val * 1024;
}
uint64_t data_size = 2_KB;
Позволява целочислени, с плаваща
запетая или текстови литерали да
създават потребителки дефинирани
типове.
В С++14 STL предоставя готови
литерали за основни типове данни.
псевдоними // typedef std::ios_base::fmtflags flags;
using flags = std::ios_base::fmtflags;
// typedef void (*func)(int, int);
using func = void (*) (int,int);
// template type alias
template<class T> using ptr = T*;
// името 'ptr<T>' вече е псевдоним на
указател към типа T
ptr<int> x;
● Типови псевдоними - подобни на
typedef
● Шаблонни псевдоними
move
семантика class_name ( class_name && ) {
...
}
class_name & class_name::operator=
( class_name && ) {
...
}
● move конструктор
● move оператор за присвояване
● std::move
● Return value optimization (RVO)
std::move
void use_vector( std::vector v ) { … }
std::vector big_vector;
// работа с big_vector
use_vector( big_vector));
// още работа с big_vector
void use_vector( std::vector v ) { … }
std::vector big_vector;
// работа с big_vector
use_vector( std::move(big_vector) );
// big_vector вече е празен, може
променливата да се преизползва
Return value optimization (RVO)
class Thing
{
public:
Thing();
~Thing();
Thing(const Thing&);
};
Thing f()
{
Thing t;
return t;
}
умни указатели
● std::unique_ptr
● std::shared_ptr
● std::weak_ptr
Пример
unique_ptr<T> do_stuff( unique_ptr<T> u )
{
// just use T
return u; // move или RVO
}
int main()
{
unique_ptr<T> p;
// *p...
p = do_stuff( move(p) ); // move
// *p...
return 0;
}
void do_stuff( shared_ptr<MyClass> u )
{
// just use MyClass
// --ref count
}
int main()
{
shared_ptr<MyClass> p;
// *p...
do_stuff( p ); // ++ref count
// *p...
return 0;
}
variadic templates
Позволяват създаването на
темплейти с променлив брой
параметри.
Очаквания за C++17
Concepts
Целта е да се подобри диагностиката на компилатора и програмистите да могат да
дават указания какви типове очакват.
Модули
Все още в много ранна фаза
Работа с файлова система
Базирана на boost::filesystem
Работа с мрежи
Базирана на boost::asio
C++ Core
Guidelines
1. C++ CG са резултат на много
човекогодини дискусии и
дизайн.
2. Целта е с насоките да се
помогне на хората ефективно
да пишат модерен С++ код
3. https://github.
com/isocpp/CppCoreGuideline
s
Guideline
Support Library
1. Съдържа типове,
предложени за употреба от
C++ CG
2. Цялата имплементация е във
хедъри
3. https://github.
com/Microsoft/GSL
Типове в GSL
span<T>
Обвивка около n-мерен масив, която не участва в управлението на живота му.
string_span<T>
Обвивка около char*, std::string и др. представяща текст. Има интерфейс много близък
до този на std::string
not_null<T>
Гарантира, че винаги държи указател от тип T, който не е nullptr
owner<T>
template <class T> using owner = T;
Типове в GSL
finally()
Създава обект, който в деструктора си извиква подадена функция или обект с
дефиниран operator()
...
auto clean_up = finally( [handle]() { close(handle); } );
...
Въпроси

More Related Content

Viewers also liked

Funny cat videos please
Funny cat videos pleaseFunny cat videos please
Funny cat videos pleasealanfederer12
 
0721-silkah產品說明(簡化版)-小檔 拷貝
0721-silkah產品說明(簡化版)-小檔 拷貝0721-silkah產品說明(簡化版)-小檔 拷貝
0721-silkah產品說明(簡化版)-小檔 拷貝Dennis (Tzu-Wei) Lin
 
Kinh nghiệm học tiếng Anh hiệu quả
Kinh nghiệm học tiếng Anh hiệu quảKinh nghiệm học tiếng Anh hiệu quả
Kinh nghiệm học tiếng Anh hiệu quảanhnguquocte
 
Coal Mine Above Ground
Coal  Mine  Above  GroundCoal  Mine  Above  Ground
Coal Mine Above Groundpt.tmi
 
Motiavation For Blood Donors
Motiavation For Blood DonorsMotiavation For Blood Donors
Motiavation For Blood DonorsManish Shivani
 
Trabajos iniciales de laboreo y limpieza
Trabajos iniciales de laboreo y limpiezaTrabajos iniciales de laboreo y limpieza
Trabajos iniciales de laboreo y limpiezaTECentelles
 
Bord Pillar
Bord PillarBord Pillar
Bord PillarVR M
 

Viewers also liked (9)

Funny cat videos please
Funny cat videos pleaseFunny cat videos please
Funny cat videos please
 
0721-silkah產品說明(簡化版)-小檔 拷貝
0721-silkah產品說明(簡化版)-小檔 拷貝0721-silkah產品說明(簡化版)-小檔 拷貝
0721-silkah產品說明(簡化版)-小檔 拷貝
 
Kinh nghiệm học tiếng Anh hiệu quả
Kinh nghiệm học tiếng Anh hiệu quảKinh nghiệm học tiếng Anh hiệu quả
Kinh nghiệm học tiếng Anh hiệu quả
 
Agri Reports
Agri ReportsAgri Reports
Agri Reports
 
Coal Mine Above Ground
Coal  Mine  Above  GroundCoal  Mine  Above  Ground
Coal Mine Above Ground
 
Motiavation For Blood Donors
Motiavation For Blood DonorsMotiavation For Blood Donors
Motiavation For Blood Donors
 
Trabajos iniciales de laboreo y limpieza
Trabajos iniciales de laboreo y limpiezaTrabajos iniciales de laboreo y limpieza
Trabajos iniciales de laboreo y limpieza
 
Bord Pillar
Bord PillarBord Pillar
Bord Pillar
 
CONTINUOUS MINERS
CONTINUOUS MINERSCONTINUOUS MINERS
CONTINUOUS MINERS
 

Similar to C++ OpenFest 2015

Демо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин НаковДемо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин НаковSvetlin Nakov
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииDAVID Academy
 
10 Minutes Coding Lesson by Svetlin Nakov (April 2021)
10 Minutes Coding Lesson by Svetlin Nakov (April 2021)10 Minutes Coding Lesson by Svetlin Nakov (April 2021)
10 Minutes Coding Lesson by Svetlin Nakov (April 2021)Svetlin Nakov
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13DAVID Academy
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New FeaturesSvetlin Nakov
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BGsvilen.ivanov
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...DAVID Academy
 
Svetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11DAVID Academy
 
Grammars for Generative Art - Lectures @ Sofia University #5
Grammars for Generative Art - Lectures @ Sofia University #5Grammars for Generative Art - Lectures @ Sofia University #5
Grammars for Generative Art - Lectures @ Sofia University #5stelf
 
Grammars for Generative Art - Lectures @ Sofia University #8
Grammars for Generative Art - Lectures @ Sofia University #8Grammars for Generative Art - Lectures @ Sofia University #8
Grammars for Generative Art - Lectures @ Sofia University #8stelf
 
BARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George PenkovBARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George PenkovSvetlin Nakov
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14DAVID Academy
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code IntroductionSvetlin Nakov
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality CodeSvetlin Nakov
 

Similar to C++ OpenFest 2015 (20)

Демо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин НаковДемо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин Наков
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
 
10 Minutes Coding Lesson by Svetlin Nakov (April 2021)
10 Minutes Coding Lesson by Svetlin Nakov (April 2021)10 Minutes Coding Lesson by Svetlin Nakov (April 2021)
10 Minutes Coding Lesson by Svetlin Nakov (April 2021)
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New Features
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
 
Why do we need a language like go?
Why do we need a language like go?Why do we need a language like go?
Why do we need a language like go?
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
 
Svetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework Overview
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11
 
Стар проект на Благо?!
Стар проект на Благо?!Стар проект на Благо?!
Стар проект на Благо?!
 
Grammars for Generative Art - Lectures @ Sofia University #5
Grammars for Generative Art - Lectures @ Sofia University #5Grammars for Generative Art - Lectures @ Sofia University #5
Grammars for Generative Art - Lectures @ Sofia University #5
 
Grammars for Generative Art - Lectures @ Sofia University #8
Grammars for Generative Art - Lectures @ Sofia University #8Grammars for Generative Art - Lectures @ Sofia University #8
Grammars for Generative Art - Lectures @ Sofia University #8
 
BARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George PenkovBARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George Penkov
 
Cross compiling
Cross compilingCross compiling
Cross compiling
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
 

C++ OpenFest 2015

  • 2. “Programming is thinking, not typing.” Casey Patton
  • 3. 2002 Започва работата по C++0x 2003 “Бъг фикс” на ISO C++ Няма промяна в езика от гледна точка на програмиста 2011 Публикуван е стандарта C++11 Множество промени в езика 2014 Публикуван е стандарта C++14 2015 Работа по C++17 Приблизително 4,4 млн потребителя на езика
  • 4. auto int func(); auto f = func(); // f е int std::vector<int> v; auto e = v.end(); // std:: vector<int>>::iterator Типът автоматично се извлича при инициализацията. auto променлива не може да остане не инициализирана. Type deduction (Effective Modern C++).
  • 5. range-based цикли std::list<std::string> list; for( auto &s: list ) { s.clear(); } int sum = 0; for( auto n: { 1, 2, 3, 4 } ) { sum += n; } int a[] = {0, 1, 2, 3, 4, 5}; for(int n: a) { std::cout << n << ' '; } Изпълпълнява цикъл върху контейнер. { auto && __range = range_expression; for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin) { range_declaration = *__begin; loop_statement } }
  • 6. ламбда изрази int var; auto lam = [&var]( int param ) -> bool { return var == param; } if( lam(5) ) { … } Конструира безименен функционален обект, който може да прихваща променливи. Особено удобни за употреба заедно с функциите, предоставени от <algorithm>. Могат да се използват като слотове в Qt5. C++14 добавя генерализирани ламбда изрази и възможност за изрази при прихващенето.
  • 7. constexpr constexpr int v = 10; constexpr int make_value( int k ) { return k + v; } class Point { public: constexpr Point( int _x, int _y ) noexcept: x{_x}, y{_y} {} private: int x; int y; }; Показва, че променливата или функцията може да се използва в константен израз. Константните изрази се изпълняват по време на компилация.
  • 8. user-defined literals constexpr uint64_t operator"" _KB ( unsigned long long int val ) { return val * 1024; } uint64_t data_size = 2_KB; Позволява целочислени, с плаваща запетая или текстови литерали да създават потребителки дефинирани типове. В С++14 STL предоставя готови литерали за основни типове данни.
  • 9. псевдоними // typedef std::ios_base::fmtflags flags; using flags = std::ios_base::fmtflags; // typedef void (*func)(int, int); using func = void (*) (int,int); // template type alias template<class T> using ptr = T*; // името 'ptr<T>' вече е псевдоним на указател към типа T ptr<int> x; ● Типови псевдоними - подобни на typedef ● Шаблонни псевдоними
  • 10. move семантика class_name ( class_name && ) { ... } class_name & class_name::operator= ( class_name && ) { ... } ● move конструктор ● move оператор за присвояване ● std::move ● Return value optimization (RVO)
  • 11. std::move void use_vector( std::vector v ) { … } std::vector big_vector; // работа с big_vector use_vector( big_vector)); // още работа с big_vector void use_vector( std::vector v ) { … } std::vector big_vector; // работа с big_vector use_vector( std::move(big_vector) ); // big_vector вече е празен, може променливата да се преизползва
  • 12. Return value optimization (RVO) class Thing { public: Thing(); ~Thing(); Thing(const Thing&); }; Thing f() { Thing t; return t; }
  • 13. умни указатели ● std::unique_ptr ● std::shared_ptr ● std::weak_ptr
  • 14. Пример unique_ptr<T> do_stuff( unique_ptr<T> u ) { // just use T return u; // move или RVO } int main() { unique_ptr<T> p; // *p... p = do_stuff( move(p) ); // move // *p... return 0; } void do_stuff( shared_ptr<MyClass> u ) { // just use MyClass // --ref count } int main() { shared_ptr<MyClass> p; // *p... do_stuff( p ); // ++ref count // *p... return 0; }
  • 15. variadic templates Позволяват създаването на темплейти с променлив брой параметри.
  • 16. Очаквания за C++17 Concepts Целта е да се подобри диагностиката на компилатора и програмистите да могат да дават указания какви типове очакват. Модули Все още в много ранна фаза Работа с файлова система Базирана на boost::filesystem Работа с мрежи Базирана на boost::asio
  • 17. C++ Core Guidelines 1. C++ CG са резултат на много човекогодини дискусии и дизайн. 2. Целта е с насоките да се помогне на хората ефективно да пишат модерен С++ код 3. https://github. com/isocpp/CppCoreGuideline s
  • 18. Guideline Support Library 1. Съдържа типове, предложени за употреба от C++ CG 2. Цялата имплементация е във хедъри 3. https://github. com/Microsoft/GSL
  • 19. Типове в GSL span<T> Обвивка около n-мерен масив, която не участва в управлението на живота му. string_span<T> Обвивка около char*, std::string и др. представяща текст. Има интерфейс много близък до този на std::string not_null<T> Гарантира, че винаги държи указател от тип T, който не е nullptr owner<T> template <class T> using owner = T;
  • 20. Типове в GSL finally() Създава обект, който в деструктора си извиква подадена функция или обект с дефиниран operator() ... auto clean_up = finally( [handle]() { close(handle); } ); ...