10. Template 타입 추론
template <typename T>
void f(T param);
f(expr);
expr??
T가 레퍼런스나 포인터이고 universal reference가 아닐 때
T가 universal reference 일 때
T가 레퍼런스나 포인터가 아닐 때
11. Template 타입 추론
레퍼런스나 포인터이고 universal reference가 아닐 때
template <typename T>
void f(T& param);
int x = 22;
const int cx = x;
const int& rx = x;
f(x); // int&
f(cx); // const int&
f(rx); // const int&
12. Template 타입 추론
레퍼런스나 포인터이고 universal reference가 아닐 때
template <typename T>
void f(const T& param);
int x = 22;
const int cx = x;
const int& rx = x;
f(x); // const int&
f(cx); // const int&
f(rx); // const int&
13. Template 타입 추론
universal reference 일 때
template <typename T>
void f(T&& param);
int x = 22;
const int cx = x;
const int& rx = x;
f(x); // int&
f(cx); // const int&
f(rx); // const int&
f(22); // int&&
14. Template 타입 추론
레퍼런스나 포인터가 아닐 때
template <typename T>
void f(T param);
int x = 22;
const int cx = x;
const int& rx = x;
f(x); // int
f(cx); // int
f(rx); // int
15. auto 타입 추론
레퍼런스나 포인터이고 universal reference가 아닐 때
int x = 22;
const int cx = x;
const int& rx = x;
auto& v1 = x; // int&
auto& v2 = cx; // const int&
auto& v3 = rx; // const int&
const auto& v1 = x; // const int&
const auto& v2 = cx; // const int&
const auto& v3 = rx; // const int&
16. auto 타입 추론
universal reference 일 때
int x = 22;
const int cx = x;
const int& rx = x;
auto&& v1 = x; // int&
auto&& v2 = cx; // const int&
auto&& v3 = rx; // const int&
auto&& v4 = 27; // int&&
17. auto 타입 추론
레퍼런스나 포인터가 아닐 때
int x = 22;
const int cx = x;
const int& rx = x;
auto v1 = x; // int
auto v2 = cx; // int
auto v3 = rx; // int
18. auto 타입 추론
Template 타입 추론과 동일함
하지만 braced initializer!
template <typename T>
void f(T param);
f( { 1, 2, 3 } ); // error!
auto x1 { 1, 2, 3 }; // std::intializer_list<int>
auto x2 = { 1, 2, 3 }; // std::intializer_list<int>
19. Lambda Capture 타입 추론
By reference : template과 동일
By value : template과 동일하지만 cv 키워드가 유지
const int cx = 0;
auto lam = [cx] {...}
class UpToCompiler
{
private:
const int cx;
...
}
20. 아까 그 문제!
Data GetData(int iID)
{
this->_mapData.find(iID)->second;
}
auto& iter = GetData(iID);