As Herb and Andrei and I determine the topics we’ll address in our technical sessions at C&B 2012, we’ll post them here. We’ll also post topics we may discuss–prospective sessions. In both cases, we welcome your feedback. What follows is the first session announcement for C++ and Beyond 2012.
Universal References in C++11
T&&
Doesn’t Always Mean Rvalue Reference
Perhaps the most significant new feature in C++11 is rvalue references; they’re the foundation on which move semantics and perfect forwarding are built. An rvalue reference is declared like a “normal” reference (now known as an lvalue reference), except you use two ampersands instead of one, i.e., “T&&
” instead of “T&
”. A reasonable expectation would be that if you see a type declaration involving “&&
”, you’re looking at an rvalue reference, but that’s not the case:
int&& var1 = 10; // here, “&&” means rvalue reference auto&& var2 = var1; // here, “&&” does not mean // rvalue reference template<typename T> void f(std::vector<T>&& param); // here, “&&” means rvalue reference template<typename T> void f(T&& param); // here, “&&” might mean // rvalue reference
In this talk, I describe the two meanings of “&&
” in type declarations, explain how to tell them apart, and introduce new terminology that makes it possible to unambiguously communicate which meaning of “&&
” is intended. Distinguishing the different meanings is important, because if you think “rvalue reference” when you see “
in a type declaration, you’ll misread a lot of C++11 code.&&
”
Our journey through DoubleAmpersandVille will include some interesting sights, including glimpses of the three different sets of type deductions rules in C++11, why “const T&&
” does far more than just add const
to “T&&
”, how the token sequence “T&&
” (where T
is a template type parameter) can have completely different meanings in different function templates, and what decltype
has in common with auto
and templates. It’ll be a fun, illuminating ride, and by the time it’s over, you’ll be able to distinguish rvalue references from their syntactic twins with aplomb.
Scott
March 26, 2012 at 4:37 am
[…] first-announced talk on “Universal References in C++11” targets a key underpinning of two C++11 marquee features – move semantics and perfect forwarding. […]
June 29, 2012 at 12:37 pm
[…] a snapshot of the list of C&B 2012 sessions so far: Universal References in C++11 (Scott) You Don’t Know [keyword] and [keyword] (Herb) Convincing Your Colleagues (Panel) Initial […]
June 29, 2012 at 12:43 pm
[…] a snapshot of the list of C&B 2012 sessions so far: Universal References in C++11 (Scott) You Don’t Know [keyword] and [keyword] (Herb) Convincing Your Colleagues (Panel) Initial […]