타입 추론 (type inference) ?

표현식의 타입을 컴파일러가 스스로 알아내는 기능

관련된 키워드로 auto와 decltype 이 있다.

 

auto 키워드

  • 함수의 리턴타입 추론
  • 구조적 바인딩에 사용
  • 표현식의 타입을 추론
  • non type, 즉 타입이 아닌 템플릿 매개변수의 타입 추론
  • 함수에 대한 또다른 문법으로 사용
  • 제네릭 람다 표현식에서 사용
  • 컴파일 시간에 자동으로 추론해서 결정됨
  • auto로 표현식의 타입을 추론하면 함수에 지정된 레퍼런스나 const 한정자가 제거됨
    • 복제 방식으로 전달되지 안헥 하려면 auto&나 const auto& 타입으로 지정해야 함
const std::string message = "TEST";

const std::string& foo()
{
	return message;
}

void main()
{
	//const 한정자 사라짐
	//str1타입은 string
	//즉 값이 복제되어버림
	auto str1 = foo();

	
	//이렇게 쓰면 값이 복사되지 않지~
	const auto& str2 = foo();
}

 

decltype 키워드

  • declared type(선언된 형식)의 줄임말
  • 인수로 지정한 표현식의 타입을 알아낸다
    • 아래와 같이 작성하면, y는 x의 type인 int로 추론할 수 있다.
int x = 123;
decltype(x) y = 456;
  • auto와 달리 레퍼런스나 const지정자를 삭제 하지 않는다
    • 위에서 쓴 예문을 decltype을 통해 작성한다면 const string&타입이 되어 값 복제가 일어나지 않는다.
decltype(foo()) str3 = foo();

 

복사했습니다!