Modern C++ (less == more) (more == more)!
|
|
- Erika Holmes
- 6 years ago
- Views:
Transcription
1
2 Modern C++ (less == more) (more == more)
3 History 1983AT&TC++/Cfront(Bjarne(Stroustrup) 1981Objec:ve<C(Brad(Cox(and(Tom(Love) 1969C(Dennis(Ritchie) 1979CwithClasses(Bjarne(Stroustrup) 1968ALGOL ALGOL58(Bauer,(Backus(et(al) 1978K&RC(Brian(Kernighan(and(Dennis(Ritchie) 1989ANSI/ISOC FORTRAN FORTRAN(John(Backus) 1977FORTRAN GNUCReleased 1999ISOC ISOC ISOC ISOC ClangReleased 2008ISOC++TR1 2014ISOC ISOC
4 What is C++? A general purpose programming language Has a strong bias towards systems programming One layer above assembly language Multi-paradigm language Imperative (C99 superset) int do_rdrand() int r; asm("retry: rdrand eax\n " jnc retry;\n" : "=a" (r)); return r; Object-oriented (polymorphism, inheritance) Functional (immutability, lambdas, currying) Meta-programming (templates, algorithms)
5 Why C++ ISO/IEC 14882:2011 International standards organisation represented by national bodies from 164 member countries Not open to manipulation by individuals or corporations for proprietary control COBOL, Fortran, Ada, Prolog, C, C++, Forth, ECMAscript C++ is a software engineering language that enables the production of high performance type-safe, statically verifiable native software.
6 Why C++ C++ is popular Source:
7 C++ projects GNU Compiler Collection, LLVM, Clang Java Virtual Machine, Dart, V8, Facebook HHVM Webkit, Chrome, Safari, Firefox, Internet Explorer MySQL, LevelDB, MongoDB, SAP DB Adobe, Autodesk, Apple, Microsoft, Scientific computing, Computer Aided Engineering, Operations Research, Telecommunications, Bitcoin
8 What is Modern C++? Modern C++ feels like a new language (Bjarne Stroustrup) C++11 refines the C++ language in a backwards compatible way to support existing C++ code while enabling simpler and more modern idioms Pass-by-value everywhere STL containers got smarter with r-value references Lambdas, initializer lists, variadic templates, etc Improved memory management Improved standard library
9 Less is exponentially more I was asked a few weeks ago, "What was the biggest surprise you encountered rolling out Go?" I knew the answer instantly: Although we expected C++ programmers to see Go as an alternative, instead most Go programmers come from languages like Python and Ruby. Very few come from C++. We Ken, Robert and myself were C++ programmers when we designed a new language to solve the problems that we thought needed to be solved for the kind of software we wrote. It seems almost paradoxical that other C++ programmers don't seem to care. Rob Pike
10 C++11 has got more std::future <atomic> static_assert auto <type_traits> <functional> lambda std::shared_ptr <thread> constexpr <regex> std::async <mutex> <random> decltype std::unique_ptr <chrono> std::tuple <memory> std::unordered_map nullptr std::unordered_set
11 C++11 has got less C++98 #include <iostream> #include <vector> using namespace std; int main() vector<int> v; C++11 #include <iostream> #include <vector> using namespace std; int main() vector<int> v = 2,3,5,7; v.push_back(2); v.push_back(3); v.push_back(5); v.push_back(7); vector<int>::iterator i; for (i = v.begin(); i = v.end(); i++) cout << *i << endl; for (auto a : v) cout << a << endl; or even less int main() for (auto a : 2,3,5,7) cout << a << endl;
12 Template Metaprogramming The C++ template system is turing complete at compile time #include <iostream> // using namespace std; template <int N> struct Factorial enum value = N * Factorial<N - 1>::value ; ; template <> struct Factorial<0> enum value = 1 ; ; int main() cout << Factorial<4>::value << endl; cout << Factorial<0>::value << endl;
13 Zero-copy layout OO Language class Price int timestamp; int volume; double price; C++11 struct Price int timestamp; int volume; double price; Price(int timestamp, int volume, double price) this.timestamp = timestamp; this.volume = volume; this.price = price; static void main(string args[]) ArrayList<Price> prices; prices.ensurecapacity(4); prices.add(new Price( , 5, 26.05)); prices.add(new Price( , 40, 26.15)); prices.add(new Price( , 100, )); prices.add(new Price( , 112, 26.15)); Price(int timestamp, int volume, double price) : timestamp(timestamp), volume(volume), price(price) ; int main() vector<price> prices; prices.reserve(4); prices.emplace_back( , 5, 26.05); prices.emplace_back( , 40, 26.15); prices.emplace_back( , 100, ); prices.emplace_back( , 112, 26.15); Containers use polymorphism and type erase Need to devolve to structure of primitive arrays to get reasonable performance, but SoA has bad cache behaviour Looks are deceiving Templates instantiate optimized code for the type Superset - allows implementation of polymorphic containers i.e. vector<object>
14 Zero-copy layout OO Language bytes, 5 allocations Opaque Object Header (16-bytes) array object reference size Opaque Object Header (16-bytes) length 64-bit Object Reference (8-bytes) 64-bit Object Reference (8-bytes) 64-bit Object Reference (8-bytes) Opaque Object Header (16-bytes) Opaque Object Header (16-bytes) Opaque Object Header (16-bytes) C bytes, 2 allocations array ptr size capacity
15 No more leaks std::unique_ptr Singleton pointer wrapper Ensures a single copy of an object No performance overhead Automatic release (no more delete) std::shared_ptr Reference counting pointer wrapper Thread-safe reference counter Acts like a normal pointer but has overhead Use when correctness is more important than performance Automatic release (no more delete)
16 R-value references template<typename T> void foo(t&&) New signature to detect r-values (temporaries) In a nut shell enables compile time detection of r-value temporaries (versus l-values) to implement efficient zero-copy move semantics and perfect forwarding What is an r-value? Adds complexity to hide complexity Feature designed for STL and library writers std::forward, std::move Efficient pass by value and return by value for containers Simplifies idiom of user code vector<price> raise(vector<price> prices) /* does something */ raise(price( , 5, 26.05), Price( , 40, 26.15));
17 Initializer lists Array initialization was a C++98 bugbear Adds new initializer syntax foo1,2,3,4 struct myclass myclass (int,int); myclass (initializer_list<int>); /* definitions... */ ; myclass foo 10,20; // calls initializer_list ctor myclass bar (10,20); // calls first constructor Can be used in constructor member initialization New header <initializer_list> New template initializer_list<t> template <typename T> struct vec vec(t x) : mx, 0, 0, 1 vec(t x, T y) : mx, y, 0, 1 vec(t x, T y, T z) : mx, y, z, 1 vec(t x, T y, T z, T w) : mx, y, z, w T m[4]; ; vec<float> a(1, 2, 3);
18 Delegating constructors Really. C++98 didn t have them template <typename T> struct vec vec(t x) : vec(x, 0, 0, 1) vec(t x, T y) : vec(x, y, 0, 1) vec(t x, T y, T z) : vec(x, y, z, 1) vec(t x, T y, T z, T w) : mx, y, z, w ; T m[4];
19 Threads and Futures std::thread std::async std::future C++ is in now line with other modern languages thread capabilities #include <iostream> #include <vector> #include <algorithm> #include <numeric> #include <future> // source template <typename I> int parallel_sum(i beg, I end) typename I::difference_type len = end - beg; if (len < 1000) return std::accumulate(beg, end, 0); I mid = beg + len/2; auto handle = std::async(std::launch::async, parallel_sum<i>, mid, end); int sum = parallel_sum(beg, mid); return sum + handle.get(); int main() std::vector<int> v(10000, 1); std::cout << "The sum is " << parallel_sum(v.begin(), v.end()) << \n';
20 Compile-time type identification New header <type_traits> std::is_void<t> std::is_integral<t> std::is_array<t> std::is_class<t> std::is_pointer<t> std::is_volatile<t> template <typename R> static const EGType& typeof() typedef typename std::remove_extent<r>::type A; typedef typename std::remove_pointer<r>::type P; if (std::is_array<r>::value) typedef typename std::remove_const<a>::type V; return arraytype<v>(); else if (std::is_pointer<r>::value) typedef typename std::remove_const<p>::type V; return pointertype<v>(); else typedef typename std::remove_const<r>::type V; return integraltype<v>(); std::rank<t>, std::extent<t,n>. many many more.
21 Variadic templates Variadic templates allow implementation of a compile time type safe printf( ) Variadic templates combined with compile time type identification gives super powers to C++ Can collect type information at compile time and use at runtime Allows creation of an Objective-C style messaging system with late-binding #include <type_traits> #include <functional> #include <string> #include <iostream> #include <iomanip> using namespace std; using namespace std::placeholders; template<typename T> void reflect_compiler_reflect(t value) cout << setw(70) << typeid(t).name() << " is_pointer=" << is_pointer<t>::value << " is_integral=" << is_integral<t>::value << " is_floating_point=" << is_floating_point<t>::value << " is_class=" << is_class<t>::value << " is_empty=" << is_empty<t>::value << endl; template<typename T, typename... Args> void reflect_compiler_reflect(t value, Args... args) reflect_compiler_reflect(value); reflect_compiler_reflect(args...); int main() int a = 1; float b = 4.5f; double c[71]; string d; auto e = [] (int a) ; auto f = std::bind(e, 99, _1); struct g; reflect_compiler_reflect(a, b, c, d, e, f, g);
22 User-defined literals Allow definition of type safe SI units and other creative uses Solve Mars Climate Orbiter type problems class Symbol public: string name; Symbol(const char *name) : name(name) ; Symbol operator "" _symbol(const char* name, size_t) return Symbol(name); int main() Symbol Foo = "Foo"_symbol;
23 More functional lambdas [], [=], [&] use in place of old-style function objects combine with existing STL generic algorithms e.g. std::partition currying std::function std::bind std::placeholders::_1
24 Lots more STL Compile time reflection <type_traits> Containers <array>, <unordered_set>, <unordered_map>, <forward_list> Multi-threading <atomic>, <thread>, <mutex>, <future>, <condition_variable> More utility <tuple>, <regex>, <chrono>, <codecvt> Numerics <random>, <ratio>, <cfenv>
25 C++14 Generic lambdas lambda initializers Variable templates make_unique Runtime sized arrays auto lambda = [](auto x, auto y) return x + y;; auto lambda = [value = 1] return value;; template<typename T> constexpr T pi = T( ); auto u = make_unique<some_type>(ctor, params); void foo(size_t n) int a[n]; Filesystem (Boost::filesystem) Networking
26 LLVM / Clang Modular compiler toolchain 2012 ACM Software System Award Clang memory sanitizer Clang address sanitizer Clang thread sanitizer Clang modernize Firefox - emscripten C++ to asm.js Chrome - PNaCl C++ LLVM bitcode Foundation of many OpenCL implementations
27 C++ - pros Maturity and Performance 30 years of evolution and production use in large scale systems ~ 2x - 3x faster than Java ~ 10x - 100x faster than Ruby and Python Compiler and architecture choices GCC 4.9, Clang 3.4, Intel C++ 14, Visual C , etc Easy access to processor features SSE4 Streaming Extensions, AVX-512 SIMD Vector Extensions Compile time static checking and type safety Static analysis tools, valgrind, clang memory sanitizer, Multi-paradigm Offers a choice of programming styles
28 C++ - cons Big language, big learning curve Define an idiom with C++: google c++ style Long compile times Idea is to spend time now to save it in the future Missing standard libraries networking, database, graphics, sound, xml and json serialization, etc The cost of runtime performance Buffer overflows,illegal memory accesses Requires static analysis Potential solution: Intel MPX (Memory Protection Extensions)
29 Conclusion Pick the right language for the job C++ is suitable for infrastructure code where performance and type safety are important C++ requires care with memory management (leaks, buffer offer-flows, off-by-one errors) Give C++ a go
30 Comments / Questions
Remedial C Now that we can actually use it Pete Williamson
Remedial C++ 11 Now that we can actually use it Pete Williamson (petewil00@hotmail.com) Overview (1) auto lambdas nullptr = default, = delete shared_ptr Range based for loops Overview (2) Uniform initialization
More informationC++11 Introduction to the New Standard. Alejandro Cabrera February 1, 2012 Florida State University Department of Computer Science
C++11 Introduction to the New Standard Alejandro Cabrera February 1, 2012 Florida State University Department of Computer Science Overview A Brief History of C++ Features Improving: Overall Use Meta-programming
More informationuse static size for this buffer
Software Design (C++) 4. Templates and standard library (STL) Juha Vihavainen University of Helsinki Overview Introduction to templates (generics) std::vector again templates: specialization by code generation
More informationC++ Programming Lecture 7 Software Engineering Group
C++ Programming Lecture 7 Software Engineering Group Philipp D. Schubert Contents 1. Template metaprogramming 2. Variadic template arguments 3. Smart pointer Template metaprogramming Template metaprogramming
More informationC++ Programming Lecture 6 Software Engineering Group
C++ Programming Lecture 6 Software Engineering Group Philipp D. Schubert Dynamic memory allocation Quick reminder: Do not confuse between the (de)allocation operators! void* operator new ( std::size_t
More informationC++ Programming Lecture 7 Software Engineering Group
C++ Programming Lecture 7 Software Engineering Group Philipp D. Schubert Contents 1. Template metaprogramming 2. Variadic template arguments 3. Smart pointer Template metaprogramming Template metaprogramming
More informationCS
CS 1666 www.cs.pitt.edu/~nlf4/cs1666/ Programming in C++ First, some praise for C++ "It certainly has its good points. But by and large I think it s a bad language. It does a lot of things half well and
More informationMaking New Pseudo-Languages with C++
Making New Pseudo-Languages with C++ Build You a C++ For Great Good ++ A 10,000 Metre Talk by David Williams-King Agenda 1/4 Introduction 2/4 Polymorphism & Multimethods 3/4 Changing the Behaviour of C++
More informationC++11 and Compiler Update
C++11 and Compiler Update John JT Thomas Sr. Director Application Developer Products About this Session A Brief History Features of C++11 you should be using now Questions 2 Bjarne Stroustrup C with Objects
More informationCross-compiling C++ to JavaScript. Challenges in porting the join.me common library to HTML5
Cross-compiling C++ to JavaScript Challenges in porting the join.me common library to HTML5 JUNE 24, 2015 LEVENTE HUNYADI join.me at a glance 2 join.me at a glance 3 join.me characteristics Application
More informationSeptember 10,
September 10, 2013 1 Bjarne Stroustrup, AT&T Bell Labs, early 80s cfront original C++ to C translator Difficult to debug Potentially inefficient Many native compilers exist today C++ is mostly upward compatible
More informationType Aliases. Examples: using newtype = existingtype; // C++11 typedef existingtype newtype; // equivalent, still works
Type Aliases A name may be defined as a synonym for an existing type name. Traditionally, typedef is used for this purpose. In the new standard, an alias declaration can also be used C++11.Thetwoformsareequivalent.
More informationC++11/14 Rocks. Clang Edition. Alex Korban
C++11/14 Rocks Clang Edition Alex Korban 1 Contents Introduction 9 C++11 guiding principles... 9 Type Inference 11 auto... 11 Some things are still manual... 12 More than syntactic sugar... 12 Why else
More informationProgramming at Compile Time. Rainer Grimm Training, Coaching, and Technology Consulting
Programming at Compile Time Rainer Grimm Training, Coaching, and Technology Consulting www.modernescpp.de Overview Constant expressions Type-traits library Template metaprogramming Template Metaprogramming
More informationCS11 Advanced C++ Spring 2018 Lecture 2
CS11 Advanced C++ Spring 2018 Lecture 2 Lab 2: Completing the Vector Last week, got the basic functionality of our Vector template working It is still missing some critical functionality Iterators are
More informationProgramming at Compile Time. Rainer Grimm Training, Coaching, and Technology Consulting
Programming at Compile Time Rainer Grimm Training, Coaching, and Technology Consulting www.modernescpp.de Overview Constant expressions Type-traits library Template metaprogramming Template Metaprogramming
More informationA brief introduction to C++
A brief introduction to C++ Rupert Nash r.nash@epcc.ed.ac.uk 13 June 2018 1 References Bjarne Stroustrup, Programming: Principles and Practice Using C++ (2nd Ed.). Assumes very little but it s long Bjarne
More informationC++11/14 Rocks. VS2013 Edition. Alex Korban
C++11/14 Rocks VS2013 Edition Alex Korban 1 Contents Introduction 18 Type Inference 20 auto... 20 decltype... 24 Side e ects... 25 Trailing return types... 26 Non-standard behavior and bugs in Visual Studio
More information6.S096 Lecture 4 Style and Structure
6.S096 Lecture 4 Style and Structure Transition from C to C++ Andre Kessler Andre Kessler 6.S096 Lecture 4 Style and Structure 1 / 24 Outline 1 Assignment Recap 2 Headers and multiple files 3 Coding style
More informationCOMP322 - Introduction to C++ Lecture 01 - Introduction
COMP322 - Introduction to C++ Lecture 01 - Introduction Robert D. Vincent School of Computer Science 6 January 2010 What this course is Crash course in C++ Only 14 lectures Single-credit course What this
More informationC The new standard
C++11 - The new standard Lars Kühne Institut für Informatik Lehrstuhl für theoretische Informatik II Friedrich-Schiller-Universität Jena January 16, 2013 Overview A little bit of history: C++ was initially
More informationModern and Lucid C++ Advanced for Professional Programmers. Part 12 Advanced Library Design. Department I - C Plus Plus Advanced
Department I - C Plus Plus Advanced Modern and Lucid C++ Advanced for Professional Programmers Part 12 Advanced Library Design Thomas Corbat / Prof. Peter Sommerlad Rapperswil, 23.02.2017 HS2017 Topics
More informationIntroduction to modern C++
Introduction to modern C++ Olve Maudal C++ has evolved a lot since it was first introduced as "C with classes" with primitive support for object-oriented programming. In particular during the last 10-15
More informationEL2310 Scientific Programming
Lecture 16: STL, C++1y (ramviyas@kth.se) Overview Overview Lecture 16: STL and C++1y Reminders Wrap up C++11 Reminders The help sessions and deadline C++ help session: Fri 24.10.2015, 15:00-17:00, Room
More informationWhere do we go from here?
Where do we go from here? C++ classes and objects, with all the moving parts visible operator overloading templates, STL, standards, Java components, collections, generics language and performance comparisons
More informationShort Notes of CS201
#includes: Short Notes of CS201 The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with < and > if the file is a system
More informationAn Introduction to Template Metaprogramming
An Introduction to Template Metaprogramming Barney Dellar Software Team Lead Toshiba Medical Visualisation Systems Caveat I decided to do this talk after getting thoroughly lost on the recent talk on SFINAE.
More informationCS201 - Introduction to Programming Glossary By
CS201 - Introduction to Programming Glossary By #include : The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with
More informationG Programming Languages Spring 2010 Lecture 11. Robert Soulé, New York University
G22.2110-001 Programming Languages Spring 2010 Lecture 11 Robert Soulé, New York University 1 Review Last week Constructors, Destructors, and Assignment Operators Classes and Functions: Design and Declaration
More informationEvolution of Programming Languages
Evolution of Programming Languages 40's machine level raw binary 50's assembly language names for instructions and addresses very specific to each machine 60's high-level languages: Fortran, Cobol, Algol,
More informationChapter 15 - C++ As A "Better C"
Chapter 15 - C++ As A "Better C" Outline 15.1 Introduction 15.2 C++ 15.3 A Simple Program: Adding Two Integers 15.4 C++ Standard Library 15.5 Header Files 15.6 Inline Functions 15.7 References and Reference
More informationImproving the Return Value of Erase-Like Algorithms
Improving the Return Value of Erase-Like Algorithms Document #: P0646R0 Date: 2017-05-19 Project: Programming Language C++ Library Evolution Working Group Reply-to: Marc Mutz 1 Introduction
More informationCOMP 181. Agenda. Midterm topics. Today: type checking. Purpose of types. Type errors. Type checking
Agenda COMP 181 Type checking October 21, 2009 Next week OOPSLA: Object-oriented Programming Systems Languages and Applications One of the top PL conferences Monday (Oct 26 th ) In-class midterm Review
More informationG52CPP C++ Programming Lecture 20
G52CPP C++ Programming Lecture 20 Dr Jason Atkin http://www.cs.nott.ac.uk/~jaa/cpp/ g52cpp.html 1 Wrapping up Slicing Problem Smart pointers More C++ things Exams 2 The slicing problem 3 Objects are not
More informationOther C++11/14 features
Other C++11/14 features Auto, decltype Range for Constexpr Enum class Initializer list Default and delete functions Etc. Zoltán Porkoláb: C++11/14 1 Auto, decltype template void printall(const
More informationC++ Basics. Data Processing Course, I. Hrivnacova, IPN Orsay
C++ Basics Data Processing Course, I. Hrivnacova, IPN Orsay The First Program Comments Function main() Input and Output Namespaces Variables Fundamental Types Operators Control constructs 1 C++ Programming
More informationIntroduction to C++11 and its use inside Qt
Introduction to C++11 and its use inside Qt Olivier Goffart February 2013 1/43 Introduction to C++11 and its use inside Qt About Me http://woboq.com http://code.woboq.org 2/43 Introduction to C++11 and
More informationCSE 333. Lecture 9 - intro to C++ Hal Perkins Department of Computer Science & Engineering University of Washington
CSE 333 Lecture 9 - intro to C++ Hal Perkins Department of Computer Science & Engineering University of Washington Administrivia New exercise posted yesterday afternoon, due Monday morning - Read a directory
More informationMODERN AND LUCID C++ ADVANCED
Informatik MODERN AND LUCID C++ ADVANCED for Professional Programmers Prof. Peter Sommerlad Thomas Corbat Director of IFS Research Assistant Rapperswil, FS 2016 LIBRARY API/ABI DESIGN PIMPL IDIOM HOURGLASS
More informationSemantics of C++ Hauptseminar im Wintersemester 2009/10 Templates
Semantics of C++ Hauptseminar im Wintersemester 2009/10 Templates Sebastian Wild Technische Universität München 11.01.2010 Abstract In this work we will discuss about templates in C++, especially their
More informationAgenda. The main body and cout. Fundamental data types. Declarations and definitions. Control structures
The main body and cout Agenda 1 Fundamental data types Declarations and definitions Control structures References, pass-by-value vs pass-by-references The main body and cout 2 C++ IS AN OO EXTENSION OF
More informationAn introduction to C++ template programming
An introduction to C++ template programming Hayo Thielecke University of Birmingham http://www.cs.bham.ac.uk/~hxt March 2015 Templates and parametric polymorphism Template parameters Member functions of
More informationWhat will happen if we try to compile, link and run this program? Do you have any comments to the code?
1 # include < iostream > 2 3 int main () 4 { 5 std :: cout
More informationIn I t n er t a er c a t c i t v i e v C+ C + + Com C pilat a ion on (RE ( PL RE ) PL : ) Th T e h L e ean L ean W a W y a by Viktor Kirilov 1
Interactive C++ Compilation (REPL): The Lean Way by Viktor Kirilov 1 About me my name is Viktor Kirilov - from Bulgaria 4 years of professional C++ in the games / VFX industries working on personal projects
More informationSTUDY NOTES UNIT 1 - INTRODUCTION TO OBJECT ORIENTED PROGRAMMING
OBJECT ORIENTED PROGRAMMING STUDY NOTES UNIT 1 - INTRODUCTION TO OBJECT ORIENTED PROGRAMMING 1. Object Oriented Programming Paradigms 2. Comparison of Programming Paradigms 3. Basic Object Oriented Programming
More informationElevate your Code to Modern C++ with Automated Tooling. Peter Sommerlad
Elevate your Code to Modern C++ with Automated Tooling Peter Sommerlad Simple C++ Less Code == More Software Know your language and its (modern) idioms Don t be afraid of STL or templates Start small.
More informationScientific Computing
Scientific Computing Martin Lotz School of Mathematics The University of Manchester Lecture 1, September 22, 2014 Outline Course Overview Programming Basics The C++ Programming Language Outline Course
More informationC++14 (Preview) Alisdair Meredith, Library Working Group Chair. Thursday, July 25, 13
C++14 (Preview) Alisdair Meredith, Library Working Group Chair 1 1 A Quick Tour of the Sausage Factory A Committee convened under ISO/IEC so multiple companies can co-operate and define the language Google
More informationIntroduction to C++ Systems Programming
Introduction to C++ Systems Programming Introduction to C++ Syntax differences between C and C++ A Simple C++ Example C++ Input/Output C++ Libraries C++ Header Files Another Simple C++ Example Inline Functions
More informationCOMP6771 Advanced C++ Programming
1. COMP6771 Advanced C++ Programming Week 1 Part 1: 2016 www.cse.unsw.edu.au/ cs6771 2. About the Course COMP6771 is a programming course, teaching practical aspects of intermediate/advanced C++ programming.
More informationRAD Studio XE3 The Developer Force Multiplier
RAD Studio XE3 The Developer Force Multiplier Windows 8 Mac OS X Mountain Lion C++11 64-bit Metropolis UI C99 Boost Visual LiveBindings C++ Bjarne Stroustrup C with Objects (1979) Modeled OO after Simula
More information6.096 Introduction to C++ January (IAP) 2009
MIT OpenCourseWare http://ocw.mit.edu 6.096 Introduction to C++ January (IAP) 2009 For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms. Welcome to 6.096 Lecture
More informationOverview of C++: Part 1
C++: Part 1 d.schmidt@vanderbilt.edu www.dre.vanderbilt.edu/~schmidt Professor of Computer Science Institute for Software Integrated Systems Vanderbilt University Nashville, Tennessee, USA C++ Overview
More informationOverview. 1. Expression Value Categories 2. Rvalue References 3. Templates 4. Miscellaneous Hilarity 2/43
Advanced C++ 1/43 Overview 1. Expression Value Categories 2. Rvalue References 3. Templates 4. Miscellaneous Hilarity 2/43 1. Expression Value Categories These are not the droids you re looking for ~Obi-wan
More informationThe Standard Template Library. EECS 211 Winter 2018
The Standard Template Library EECS 211 Winter 2018 2 Problem: finding the maximum element of a vector A simple fixed-size vector struct: struct Int_vec int* data; size_t size; ; 3 Solution: max_int_vec
More informationCS11 Introduction to C++ Fall Lecture 1
CS11 Introduction to C++ Fall 2006-2007 Lecture 1 Welcome! 8 Lectures (~1 hour) Slides posted on CS11 website http://www.cs.caltech.edu/courses/cs11 7 Lab Assignments on course website Available on Monday
More informationStructured bindings with polymorphic lambas
1 Introduction Structured bindings with polymorphic lambas Aaryaman Sagar (aary800@gmail.com) August 14, 2017 This paper proposes usage of structured bindings with polymorphic lambdas, adding them to another
More informationDistributed and Parallel Systems Group University of Innsbruck. Simone Pellegrini, Radu Prodan and Thomas Fahringer
Distributed and Parallel Systems Group University of Innsbruck Simone Pellegrini, Radu Prodan and Thomas Fahringer MPI is a relatively old standard MPI 1.0 was introduced in 1994 Designed upon an abstraction
More informationIntroduction to Move Semantics in C++ C and C
Introduction to Move Semantics in C++ C++ 2011 and C++ 2014 Jean-Paul RIGAULT University of Nice - Sophia Antipolis Engineering School Computer Science Department Sophia Antipolis, France Contents of the
More informationCS 485 Advanced Object Oriented Design C++ Lambda, Function Objects, Brace Initializers constexpr, Move Constructors/Rvalue references.
CS 485 Advanced Object Oriented Design C++ Lambda, Function Objects, Brace Initializers constexpr, Move Constructors/Rvalue references Spring 2017 Meyers 7,15, 31-34 Reading Inline Functions Declare function
More informationDr. Md. Humayun Kabir CSE Department, BUET
C++ Dr. Md. Humayun Kabir CSE Department, BUET History of C++ Invented by Bjarne Stroustrup at Bell Lab in 1979 Initially known as C with Classes Classes and Basic Inheritance The name was changed to C++
More informationObject Oriented Paradigm
Object Oriented Paradigm History Simula 67 A Simulation Language 1967 (Algol 60 based) Smalltalk OO Language 1972 (1 st version) 1980 (standard) Background Ideas Record + code OBJECT (attributes + methods)
More informationReview&Preview 1/23/15, 4:08:07 PM 1. 3rd edition - standardized, and standard library allows programmer to start from a higher level
Review&Preview 1/23/15, 4:08:07 PM 1 Stroustrup: All four prefaces, Ch. 1. Then read "Tour" chapters 2, 3, 4 and 5 but skip 5.3 Concurrency. Watch for new C++11 usage. H: Using using. Stroustrup Introduction:
More informationFast Introduction to Object Oriented Programming and C++
Fast Introduction to Object Oriented Programming and C++ Daniel G. Aliaga Note: a compilation of slides from Jacques de Wet, Ohio State University, Chad Willwerth, and Daniel Aliaga. Outline Programming
More informationRvalue References, Move Semantics, Universal References
Rvalue References, Move Semantics, Universal References PV264 Advanced Programming in C++ Nikola Beneš Jan Mrázek Vladimír Štill Faculty of Informatics, Masaryk University Spring 2018 PV264: Rvalue References,
More informationBefore we dive in. Preprocessing Compilation Linkage
Templates Before we dive in Preprocessing Compilation Linkage 2 Motivation A useful routine to have is void swap( int& a, int &b ) int tmp = a; a = b; b = tmp; 3 Example What happens if we want to swap
More informationTHE STANDARD TEMPLATE LIBRARY (STL) Week 6 BITE 1513 Computer Game Programming
THE STANDARD TEMPLATE LIBRARY (STL) Week 6 BITE 1513 Computer Game Programming What the heck is STL???? Another hard to understand and lazy to implement stuff? Standard Template Library The standard template
More informationHomework 4. Any questions?
CSE333 SECTION 8 Homework 4 Any questions? STL Standard Template Library Has many pre-build container classes STL containers store by value, not by reference Should try to use this as much as possible
More informationC++ Programming Lecture 2 Software Engineering Group
C++ Programming Lecture 2 Software Engineering Group Philipp D. Schubert Contents 1. Compiler errors 2. Functions 3. std::string 4. std::vector 5. Containers 6. Pointer and reference types Compiler errors
More informationCS11 Intro C++ Spring 2018 Lecture 1
CS11 Intro C++ Spring 2018 Lecture 1 Welcome to CS11 Intro C++! An introduction to the C++ programming language and tools Prerequisites: CS11 C track, or equivalent experience with a curly-brace language,
More informationFriendship in Service of Testing
Friendship in Service of Testing Gábor Márton, martongabesz@gmail.com Zoltán Porkoláb, gsd@elte.hu 1 / 47 Agenda Introduction, principals Case study Making the example better Vision 2 / 47 Functional Programming
More informationA Tour of the C++ Programming Language
A Tour of the C++ Programming Language We already know C Everything that can be done with a computer, can be done in C Why should we learn another language? Newer languages provide a bigger toolbox Some
More informationTDDD38 - Advanced programming in C++
TDDD38 - Advanced programming in C++ Templates III Christoffer Holm Department of Computer and information science 1 Dependent Names 2 More on Templates 3 SFINAE 1 Dependent Names 2 More on Templates 3
More informationC++11: 10 Features You Should be Using. Gordon R&D Runtime Engineer Codeplay Software Ltd.
C++11: 10 Features You Should be Using Gordon Brown @AerialMantis R&D Runtime Engineer Codeplay Software Ltd. Agenda Default and Deleted Methods Static Assertions Delegated and Inherited Constructors Null
More informationDebug C++ Without Running. Anastasia Kazakova
Debug C++ Without Running Anastasia Kazakova JetBrains @anastasiak2512 Agenda 1. Tricky C++ language. Show samples! 2. Seems to help but it doesn t. Why? Running / Debugging Static / dynamic code analysis
More informationCS3157: Advanced Programming. Outline
CS3157: Advanced Programming Lecture #12 Apr 3 Shlomo Hershkop shlomo@cs.columbia.edu 1 Outline Intro CPP Boring stuff: Language basics: identifiers, data types, operators, type conversions, branching
More informationA Tour of the C++ Programming Language
A Tour of the C++ Programming Language We already know C Everything that can be done with a computer, can be done in C Why should we learn another language? Newer languages provide a bigger toolbox Some
More informationExpansion statements. Version history. Introduction. Basic usage
Expansion statements Version history Document: P1306R0 Revises: P0589R0 Date: 08 10 2018 Audience: EWG Authors: Andrew Sutton (asutton@uakron.edu) Sam Goodrick (sgoodrick@lock3software.com) Daveed Vandevoorde
More informationMore on Templates. Shahram Rahatlou. Corso di Programmazione++
More on Templates Standard Template Library Shahram Rahatlou http://www.roma1.infn.it/people/rahatlou/programmazione++/ it/ / h tl / i / Corso di Programmazione++ Roma, 19 May 2008 More on Template Inheritance
More informationIntroduction to C++ Professor Hugh C. Lauer CS-2303, System Programming Concepts
Introduction to C++ Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2 nd edition, by Kernighan and Ritchie, Absolute C++, by Walter
More informationThis is a CLOSED-BOOK-CLOSED-NOTES exam consisting of five (5) questions. Write your answer in the answer booklet provided. 1. OO concepts (5 points)
COMP152H Object Oriented Programming and Data Structures Spring Semester 2011 Midterm Exam March 22, 2011, 9:00-10:20am in Room 3598 Instructor: Chi Keung Tang This is a CLOSED-BOOK-CLOSED-NOTES exam consisting
More informationChapter 3.3 Programming Fundamentals. Languages Paradigms Basic Data Types Data Structures OO in Game Design Component Systems Design Patterns
Chapter 3.3 Programming Fundamentals Languages Paradigms Basic Data Types Data Structures OO in Game Design Component Systems Design Patterns Languages Language: A system composed of signs (symbols, indices,
More informationOutline. 1 Function calls and parameter passing. 2 Pointers, arrays, and references. 5 Declarations, scope, and lifetimes 6 I/O
Outline EDAF30 Programming in C++ 2. Introduction. More on function calls and types. Sven Gestegård Robertz Computer Science, LTH 2018 1 Function calls and parameter passing 2 Pointers, arrays, and references
More informationWorking with Batches of Data
Hartmut Kaiser hkaiser@cct.lsu.edu http://www.cct.lsu.edu/ hkaiser/fall_2012/csc1254.html 2 Abstract So far we looked at simple read a string print a string problems. Now we will look at more complex problems
More informationOverload Resolution. Ansel Sermersheim & Barbara Geller Amsterdam C++ Group March 2019
Ansel Sermersheim & Barbara Geller Amsterdam C++ Group March 2019 1 Introduction Prologue Definition of Function Overloading Determining which Overload to call How Works Standard Conversion Sequences Examples
More informationCours de C++ Introduction
Cours de C++ Introduction Cécile Braunstein cecile.braunstein@lip6.fr Cours de C++ 1 / 20 Généralité Notes Interros cours 1/3 Contrôle TP 1/3 Mini-projet 1/3 Bonus (Note de Participation) jusqu à 2 points
More informationIndex. Symbols. bit sequence, 27 ^ (exclusive OR) operator, 30 hexadecimal number, 27 left shift (<<) operator, 31 right shift (>>) operator, 32
Symbols && operator, 32 operator, 32 A AddDynamicOption method, 188 AddItem method, 192 Addition operator, 18 Allocating memory, 228 overloaded delete function, 233 overloaded new function, 232 unnamed
More informationWhy C++? C vs. C Design goals of C++ C vs. C++ - 2
Why C++? C vs. C++ - 1 Popular and relevant (used in nearly every application domain): end-user applications (Word, Excel, PowerPoint, Photoshop, Acrobat, Quicken, games) operating systems (Windows 9x,
More informationIntroduce C# as Object Oriented programming language. Explain, tokens,
Module 2 98 Assignment 1 Introduce C# as Object Oriented programming language. Explain, tokens, lexicals and control flow constructs. 99 The C# Family Tree C Platform Independence C++ Object Orientation
More informationTemplates. Zoltán Porkoláb: C++11/14 1
Templates From macros to templates Parameter deduction, instantiation,specialization Class templates, partial specialization Explicit instantiation Dependent types Scope resolution, lookup Mixins CRTP
More informationI m sure you have been annoyed at least once by having to type out types like this:
Type Inference The first thing I m going to talk about is type inference. C++11 provides mechanisms which make the compiler deduce the types of expressions. These features allow you to make your code more
More informationFrom Java to C++ From Java to C++ CSE250 Lecture Notes Weeks 1 2, part of 3. Kenneth W. Regan University at Buffalo (SUNY) September 10, 2009
From Java to C++ CSE250 Lecture Notes Weeks 1 2, part of 3 Kenneth W. Regan University at Buffalo (SUNY) September 10, 2009 C++ Values, References, and Pointers 1 C++ Values, References, and Pointers 2
More informationA Crash Course in (Some of) Modern C++
CMPT 373 Software Development Methods A Crash Course in (Some of) Modern C++ Nick Sumner wsumner@sfu.ca With material from Bjarne Stroustrup & Herb Sutter C++ was complicated/intimidating Pointers Arithmetic
More informationCSE 333 Lecture 9 - intro to C++
CSE 333 Lecture 9 - intro to C++ Hal Perkins Department of Computer Science & Engineering University of Washington Administrivia & Agenda Main topic: Intro to C++ But first: Some hints on HW2 Labs: The
More informationC++17 and Beyond. Mark Isaacson
C++17 and Beyond Mark Isaacson 1 Roadmap What s coming in C++17 and C++20 The surprising utility of std::string_view C++20 s most deliciously scary feature: operator dot Making templates more accessible
More informationC++14 Reflections Without Macros, Markup nor External Tooling
C++14 Reflections Without Macros, Markup nor External Tooling Metaprogramming Tricks for POD Types Antony Polukhin Boost libraries maintainer (DLL, LexicalCast, Any, TypeIndex, Conversion) + Boost.CircularBuffer,
More informationArrays. Returning arrays Pointers Dynamic arrays Smart pointers Vectors
Arrays Returning arrays Pointers Dynamic arrays Smart pointers Vectors To declare an array specify the type, its name, and its size in []s int arr1[10]; //or int arr2[] = {1,2,3,4,5,6,7,8}; arr2 has 8
More informationC++ Template Meta. A basic introduction to basic C++ techniques used in template metaprogramming.
C++ Template Meta A basic introduction to basic C++ techniques used in template metaprogramming. Github Repo The presentation and all of the code are online on github, with an OSI license. github.com/zwimer/template-meta-tutorial
More informationGridKa School 2013: Effective Analysis C++ Templates
GridKa School 2013: Effective Analysis C++ Templates Introduction Jörg Meyer, Steinbuch Centre for Computing, Scientific Data Management KIT University of the State of Baden-Wuerttemberg and National Research
More informationDriving Into the Future With Modern C++ A Look at Adaptive Autosar and the C++14 Coding Guidelines. Jan Babst CppCon 2017 Sep , Bellevue, WA
Driving Into the Future With Modern C++ A Look at Adaptive Autosar and the C++14 Coding Guidelines Jan Babst, Bellevue, WA Overview What is Adaptive AUTOSAR? AUTOSAR C++14 guidelines Summary and Outlook
More information