Upload
tyler-snow
View
214
Download
0
Embed Size (px)
Citation preview
C++ TEMPLATE THOUGHTS
► Generated granularly on-demand
► “Granularly” explained in a minnit.
► Can be inlined
► Fast at runtime
C++11 COOL THINGS
► Static_assert
► STL threading (with a new memory model!)
► ALL THE RRID
► Lambdas
► Why you shouldn’t use normal arrays
► Move semantics (the important part)
THREADING – ATOMIC DATA TYPES
► Under <atomic>
► Everything from atomic_float to atomic_uint_fast32_t
STD::VECTOR/STD::ARRAY
► (std::vector | std::array) > raw arrays
► Checked STL
► [] guarantees 0 bounds checking with unchecked STL
► Iterator support
► Support for .size()/.max_size()
MOVE SEMANTICS
► Allow for no-fail moving from one variable to another
► Really low overhead
► Can be used in place of copying somewhat often
► I like to move it, move it.
WHAT ARE MOVE SEMANTICS?
► Denoted by && ‘double-ref/ref-ref’
► Basically:
► One variable, A, kills another, b.
► A steals b’s innards
► A places b’s innards in itself
WHY DO WE CARE?
► Example of strings using copy vs move constructors:
► By doing copy = primary, invoke string copy constructor
► Allocate new char[]
► Copy from primary to copy…
► By doing move = primary, invoke string move constructor
► Steal char[] pointer from primary
► “Primary” is no longer useable after this.
WHY DO WE CARE?
► This code used to be bad:
► It would call string::string(const string&) once or twice
► Now it calls string::string(string&&) once or twice
► Now just a maximum of six assignments
► As opposed to 2 allocs, 6 assignments, 2 memcpys