310 likes | 470 Views
C++ Talk. The short version! :D. You’ll hopefully know the basics, so this talk covers: C++ templates C++11 cool things. Overview. Conceptually similar to Java generics More powerful though. C++ Templates. C++ Template Examples. C++ Template Examples. C++ Template Examples.
E N D
C++ Talk The short version! :D
You’ll hopefully know the basics, so this talk covers: • C++ templates • C++11 cool things Overview
Conceptually similar to Java generics • More powerful though C++ Templates
Generated granularly on-demand • “Granularly” explained in a minnit. • Can be inlined • Fast at runtime C++ Template Thoughts
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) C++11 Cool THings
(‘i’ is read-only in this context. So we can’t do ++i) Lambdas – Capture Group
Under <atomic> • Everything from atomic_float to atomic_uint_fast32_t Threading – Atomic Data TYpes
Std::shared_ptr<T> • Std::unique_ptr<T> • Std::weak_ptr<T> • … RRID Stuffs
(std::vector | std::array) > raw arrays • Checked STL • [] guarantees 0 bounds checking with unchecked STL • Iterator support • Support for .size()/.max_size() Std::vector/std::array
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. 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 What are move semantics?
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(conststring&) 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 Why do we care?
Std::thread provides for easy threading • Templates are extremely flexible • Also generated on demand • Lambdas are great for one-off functions • Use std::unique_ptr and std::shared_ptr in place of raw pointers • Use std::array/std::vector instead of raw arrays Summary