Académique Documents
Professionnel Documents
Culture Documents
C++ Type
Deduction
and Why
You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 2
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Type
T&/T*
Deduction auto object
implicit return init capture
T
C++98
C++11 decltype
C++14 decltype(auto)
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 3
Scott Meyers, Software Development Consultant 2011 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 4
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
ScottMeyersHairPoll.com
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 5
Scott Meyers, Software Development Consultant 2011 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 6
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 7
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 8
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 9
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 10
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 11
Yawn
Type deduction for non-URef reference/pointer parameters/variables
quite intuitive.
It Just
Works
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 12
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Universal References
template<typename T>
void f(T&& param);
f(expr);
Treated like normal reference parameters, except:
If expr is lvalue with deduced type E, T deduced as E&.
Reference-collapsing yields type E& for param.
int x = 22; // as before
const int cx = x; // as before
const int& rx = x; // as before
f(x); // x is lvalue T int&, param's type int&
f(cx); // cx is lvalue T const int&,
// param's type const int&
f(rx); // rx is lvalue T const int&,
// param's type const int&
f(22); // x is rvalue no special handling;
// T int, params type is int&&
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 13
By-Value Parameters
Deduction rules a bit different (vis--vis by-reference/by-pointer):
As before, if exprs type is a reference, ignore that.
If expr is const or volatile, ignore that.
T is the result.
template<typename T>
void f(T param); // param passed by value
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 14
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 15
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 16
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 17
Special Cases
Special treatment for exprs that are arrays or functions:
When initializing a reference, array/function type deduced.
Otherwise decays to a pointer before type deduction.
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 18
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 19
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 20
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 21
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 22
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 23
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 24
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 25
Ring-Tailed Lemurs
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 27
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 28
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 29
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 30
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 31
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 32
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 34
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 35
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 36
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 37
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 38
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 39
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 40
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 41
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 42
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Further Information
Effective Modern C++, Scott Meyers, OReilly,
anticipated October 2014.
Chapter 1 covers type deduction.
Available for free download at oreilly.com.
C++ auto and decltype Explained,
Thomas Becker, thbecker.net, May 2013.
Universal References in C++11, Scott Meyers,
isocpp.org Blog, November 2012.
New Rules for auto deduction from
braced-init-list, James Dennett, Standardization
Committee paper N3922, 13 February 2014.
If braced initializers have no type, why is the committee so insistent
on deducing one for them?, Scott Meyers, The View from Aristeia
(blog), 8 March 2014.
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 43
Further Information
Capture Quirk in C++14, Scott Meyers, The View From Aristeia (blog),
3 February 2014.
Type deduction for by-value lambda captures vs. for init captures.
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 44
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/
Type Deduction and Why You Care
Licensing Information
Scott Meyers licenses materials for this and other training courses for
commercial or personal use. Details:
Commercial use: http://aristeia.com/Licensing/licensing.html
Personal use: http://aristeia.com/Licensing/personalUse.html
Courses currently available for personal use include:
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 45
Scott Meyers, Software Development Consultant 2014 Scott Meyers, all rights reserved.
http://aristeia.com/ Slide 46
Scott Meyers, Software Development Consultant 2013 Scott Meyers, all rights reserved.
http://aristeia.com/