티스토리 뷰

auto

 

auto는 추론을 할 때 const int, 이러한 것들을 때어버린다. 즉 int로 인식한다는 뜻이다.

 

이러한 경우 const auto& 로 추론을 해줘야한다.

 

auto  로도 const 자료형& 추론이 되긴 한다.

 

 

template<class T> 이러한 경우에도 const int 같은 경우에 대해, auto와 비슷한 논리가 적용된다.

 

 

auto&& r-value reference 또한, 지원한다.

 

decltype

 

typedef decltype(lhs * rhs) pruduct_type;

product_type prod2 = lhs * rhs;

decltype(lhs * rhs) prod3 = lhs * rhs;

 

return type으로도 사용이 가능하다.

templata<typename T, typename S>
auto func_ex8(T lhs, S rhs) -> decltype(lhs * rhs)
{
	return lhs * rhs;
}
typedef decltype(x)		x_type;
typedef decltype(cx)		cx_type; // const를 가져옴
typedef decltype(crx)		crx_type; // const 유지
typedef decltype(p->m_x)	x_type; // const를 가져오지 않음.

typedef delctype((x)) x_with_parens_type; // add references to l-values
typedef delctype((cx)) cx_with_parens_type;
typedef delctype((crx)) cx_with_parens_type;
typedef delctype((p->m_x)) px_with_parens_type; // const를 가져옴 왜냐하면 reference로 가져오는데 변하면 큰일 나기 때문

 

 

type이 같을 경우  &를 붙혀서 리턴 하지 않지만, type이 다를 경우 reference를 붙혀 리턴하는 경우가 존재하므로 이러한 과정을 거치는것이 안전하다.

template<typename T, typename S>
auto ex13(T lhs, S rhs) ->
	typename std::remove_reference<decltype(x > y ? x : y)>::type
{
    return (x > y ? x : y)
}

 

 

auto lamdba = [](auto x, auto y)
{
	return x + y;
}

cout << lambda(1.1, 2) << " " << lambda(3, 2) << " " << lambda(4.5, 2.2) << endl; 
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함