큰 프로그램을 작성할때에는 많은 변수를 사용하게 되는데, 매번 자료형을 설정하여 코드를 작성하는 것보다 Auto 키워드를 사용하여 자료형 추론을 도와주는 방법이 있다.
형추론이란?
- 자료형을 상황에 따라서 자신이 스스로 결정하게 만드는 것을 말한다.
auto
키워드를 사용한다.
#include <iostream>
int main()
{
using namespace std;
auto a = 123;
return 0;
}
auto
로 선언하였음에도 int
형으로 출력되는 것을 볼 수 있다. 만약, auto
를 사용한 변수 a
를 특정 값으로 초기화를 하지 않는다면 사용할 수 없다. 이는 당연한 것이다. 추론을 해야하는데 추론을 할 수 있는 값이 정해져 있지 않다면 추론할 수가 없으니 error을 발생시키는 것이다.
#include <iostream>
int main()
{
using namespace std;
// int
auto a = 123;
//double
auto d = 123.0;
//double
auto c = 1 + 2.0;
return 0;
}
이처럼 쉽게 자료형을 추론하는 것을 볼 수 있는데, 막 사용하는 것은 좋지 않다. 프로그래머가 이 변수가 어떤 자료형을 갖는지 확실히 아는 것이 더 좋다.
#include <iostream>
auto add(int x, int y)
{
return x + (double)y;
}
int main()
{
using namespace std;
auto a = 123;
auto d = 123.0;
auto c = 1 + 2.0;
auto result = add(1, 2);
return 0;
}
이런 식으로 코드를 작성할 수도 있다. 매우 편하다. 매개변수는 int
형으로 받았지만 출력은 double
로 낼 수 있는 방법중에 하나이기도 하다. 뭐 함수를 만들때 double
형으로 만들면 되긴 하지만, 매번 설정하기 귀찮기도 하니깐(긁적..)
위의 그림처럼 사용하면 오류가 난다. 오류 내용은 'auto' is not allowed here라는 문구가 뜨게 된다. 무슨 내용이냐 하면, auto는 상황에 따라 어떤 계산과정이 나오는 것이다.
입력 파라미터에
auto
를 넣는다는 것은 그auto
를 자동으로 추론해달라는 것이 아니라 다양한 경우에 대해서add()
가 자동으로 만들어진다는 의미이다.
즉, add(1, 2.0), add(1, 2) 것처럼 다양한 것을 의미한다.
그렇다면 매개변수에 auto를 사용하지 못한다는 건가? template를 사용하면 된다. 편리한 도구이긴 하지만 사용하기가 어렵다. 나중에 알게 될 것!
또, 원래 return 값으로는 하나의 값만 반환하는 것으로 알고 있는데, template를 같이 사용하면 여러 개를 반환할 수 있음.
auto add(int x, int y) -> int
{
return x + (double)y;
}
이런식으로 자취를 남길 수도 있다. compile에 오류가 생기진 않음.
auto add(int x, int y) -> int;
auto add(int x, int y) -> double;
int add(int x, int y);
double add(int x, int y);
줄 맞춤을 하면 좀 보기 싫으니, 위의 코드처럼 작성하는 경우가 있긴 하다. 좀 더 직관적으로 볼 수 있다는 장점이 있다.