auto 키워드와 자료형 추론 본문
auto
C++ 11에서 타입 추론 (Type Inference in C++ 11)
C++에서 auto 키워드는 유용하다.
123이 정수라는 것을 이미 알고 있다면 , 왜 a의 타입(=자료형)을 int라고 명시적으로 선언해야 할까?
변수를 초기화 할 때 사용하는 값을 기준으로 적절한 타입을 추론하도록 하면 편하지 않을까?
auto 키워드는 선언된 변수의 초기화 식을 사용하여 해당 형식을 추론하도록 컴파일러에 지시한다.
즉, auto 키워드를 사용하면 초기값의 형식에 맞춰 선언하는 인스턴스(변수)의 형식이 자동으로 결정된다.
이것을 타입 추론(type inference), 형추론 이라고 한다.
당연하지만 초기화를 하지 않으면 auto를 사용할 수 없다.
변수를 함수의 반환 값으로 초기화 할 때도 사용 가능 하다.
int add(int x, int y)
{
return x + y;
}
int main()
{
auto sum = add(5,6); //add()returns an int, so sum will be type int
return 0;
}
주의: 이 기능은 생성시 변수를 초기화 할 때만 작동한다.
초기화 값을 사용하지 않고 생성된 변수는 이 기능을 사용할 수 없다.
auto 키워드는 함수 매개변수와 함께 사용할 수 없다
#include <iostream>
void addAndPrint(auto x, auto y)
{
std::cout << x + y;
}
위 코드는 작동하지 않는다.
컴파일러가 컴파일시 함수 매개 변수 x와 y에 대한 타입을 추론할 수 없기 때문이다.
우리는 함수가 다양한 변수,파라미터형에 대해서 자동으로 정의 되기를 원한다
입력 파라미터에 auto를 넣고 싶다는 얘기는 그 auto를 자동으로 결정, 추론해달라는 얘기가 아니라
다양한 경우에 대해서 add 함수가 자동으로 만들어졌으면 좋겠다는 의미.
아무튼 auto는 못쓴다 대신에 template이라는 것을 사용하면 된다.
auto 보다 더 편리하게 만들어 준다. 단점은 조금 쓰기 어려움.
C++에서는 return 값이 한개밖에 안된다고 생각하는 사람이 많은데
C++ 17 들어와서는 template과 섞어 쓰면 여러개의 return 값을 동시에 반환하는 방법이 생겼다.
C++ 14에서 함수를 위한 타입 추론
C++ 14는 auto 키워드가 함수의 반환 타입을 자동으로 추론 할 수 있도록 확장되었다.
auto add(int x, int y)
{
return x + y;
}
x+y 는 정수로 평가되기 때문에 컴파일러는 add()함수가 int 타입의 반환 값을 가져야 한다고 추론한다.
위 문법은 좋아 보일 수도 있지만 사용하지 않는게 좋다. 함수의 반환 타입은 호출자가 함수에서 어떤 값을 반환할지 예상하는데, auto 키워드를 사용하면 잘못 해석할 수 있으며, 이로 인해 의도하지 않은 오류가 발생할 수 있다.
trailing
함수 선언할때 꼬리를 남긴다는 뉘앙스
auto 자리에 int를 넣어버리면 되는데
굳이 auto를 넣고 뒤에 int를 넣어줄 필요가 있나 생각하 수 있다.
이렇게 하면 좋은 이유가
나중에 코드 정리할때 보기가 좋다.
2번처럼 하면 줄맞추기도 불편
2번 보다는 1번이 보기가 편하다
그리고 함수를 설명할때 입력이 뭐고 어떤 게 들어가서 출력이 나온다는 설명 많이 하는데
얘 가 들어가서 얘가 나온다 이렇게 보면 trailing이 보기 편한 측면이 있다.
'💘 C++ > 변수범위, 변수형' 카테고리의 다른 글
문자열 std::string (0) | 2022.01.23 |
---|---|
형변환 Type Conversion (0) | 2022.01.17 |
Using 문과 모호성 Ambiguity (0) | 2022.01.15 |
전역 변수, 정적 변수, 내부 연결, 외부 연결 Global Variable, Static Variable, Internal Linkage, External Linkage (0) | 2022.01.14 |
지역 변수, 범위, 지속기간 Local variables, scope, duration (0) | 2022.01.11 |