본문 바로가기
프로그래밍

[C++11] auto 정리

by _BlankSpace 2017. 5. 24.

이 포스팅에서 사용한 코드는 다음의 https://github.com/blankspace-dev/C-/tree/master/2017/05/23 에 업로드 해두었으니, 주소 참고 바랍니다.


이번 포스팅은 C++11 문법 중, auto에 관하여 정리하고자 합니다. 


 1. 키워드 auto 란? 

auto는 C++11부터 사용이 가능한 키워드가 되었습니다. 이 말은 이후로의 C++에서는 auto라는 키워드가 계속해서 존재한다는 것입니다.

기존의 코드에서는 사용자가 코드를 작성할 때, 모든 자료형을 명시적으로 정해주어야 했습니다. 하지만, auto 키워드는 이러한 작업을 대신 해주는 기능이라고 생각하면 되겠습니다.

따라서 auto 키워드를 사용했을 때, 프로그래머를 대신하여 자료형을 정해주기 위해서는 변수 선언과 함께 반드시 초기화가 필요할 것입니다.


 2. 키워드 auto는 언제 알맞은 자료형으로 대체되는가? 

앞서 말한 것처럼, 변수 선언과 함께 반드시 초기화가 이루어 진다면, 컴파일에서 알맞게 대체되는 방식으로 진행된다고 합니다.


이러한 auto를 사용하면 복잡한 자료형을 대신할 수 있습니다. 그럼 코드의 양은 줄어들고, 가독성은 높여지겠죠?


 3. 키워드 auto의 예제. 

auto는 굉장히 유용한 데, 그 쓰임도 어렵지 않습니다. 따라서 다음의 몇 가지 예제로 사용 방법을 설명하겠습니다.


먼저, c++11 문법을 사용하기 위해서는 컴파일을 할 때, 추가적인 플래그가 필요합니다.


물론, 이것은 리눅스에서 컴파일을 말하는 것이므로, 비주얼 스튜디오를 사용하시는 분이라면 넘어가셔도 됩니다.


저의 경우에는 우분투에서 컴파일을 진행하였는 데, 우분투 컴파일 방법은 다음과 같습니다.


g++ -std=c++11 cppAutoEx1.cpp


이런 식으로 -std=c++11을 넣어주어야 컴파일이 가능하니, 꼭 기억하시길 바랍니다.


cppAutoEx1.cpp

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main(void)
{
    int num1 = 5;
    auto num2 = num1;
    cout << "num1 : " << num1 << " / " << "num2 : " << num2 << endl;
    return 0;
}
cs


결과:

 >> num1 : 5 / num2 : 5 

첫 번째 예제는 자료형 대신에 auto를 사용한 것입니다. 8행에서 auto 키워드를 사용하였고, 정수형의 num1을 초기 값으로 초기화하였습니다.


그 결과, 5라는 값이 대입된 것을 볼 수 있습니다.


cppAutoEx2.cpp

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main(void)
{
    int num1 = 15;
    auto& num2 = num1;
    cout << "num1 : " << num1 << " / " << "num2 : " << num2 << endl;
    return 0;
}
cs


결과:

 >> num1 : 15 / num2 : 15 

두 번째 예제는 첫 번째 예제와는 다르게 auto 키워드에 참조자를 사용하였습니다. 따라서 num1를 num2도 같이 바라보고 있는 상태인 것입니다.


이처럼, auto 키워드에도 참조자를 사용할 수 있습니다.


cppAutoEx3.cpp

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main(void)
{
    for (auto n = 10; n < 20; n++) {
    cout << "n : " << n << endl;
    }
    return 0;
}
cs


결과:

 >> n : 10

 >> n : 11

 >> n : 12

 >> n : 13

 >> n : 14

 >> n : 15

 >> n : 16

 >> n : 17

 >> n : 18

 >> n : 19

이번 예제는 반복문에서의 auto 키워드 사용입니다. 이것도 정수형 10으로 초기화 했기 때문에 무리 없이 auto 키워드 사용이 가능합니다.


cppAutoEx5.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
struct exAuto{
    static const auto a = 5;
    static const auto b = 'h';
};
 
int main(void)
{
    struct exAuto ea;
    cout << "a : " << ea.a << endl;
    cout << "b : " << ea.b << endl;
    return 0;
}
cs


결과:

 >> a : 5

 >> b : h

마지막 예제입니다. 구조체에서 auto 키워드로 자료형을 선언했을 때는 어떻게 될 지 테스트해봤습니다.

위의 예제는 뭔가 다릅니다. 이 글을 보시는 분들은 먼저, static const auto 가 아닌  auto만 사용하여 구조체를 정의해보시기 바랍니다.


직접 실행을 하게 되면, 에러가 발생되는 것을 볼 수 있습니다.


그래서 해결 방법을 찾아보니 위의 예제처럼 static const 를 붙어야 사용이 가능하다는 것을 알 수 있었습니다.


또한, 다음의 글을 찾을 수 있었는 데, 이 글을 참조하시면 좋을 것 같습니다.


The auto type-specifier can also be used in declaring a variable in the condition of a selection statement (6.4) or an iteration statement (6.5), in the type-specifier-seq in the new-type-id or type-id of a new-expression (5.3.4), in a for-range-declaration, and in declaring a static data member with a brace-or-equal-initializer that appears within the member-specification of a class definition (9.4.2).


이상 c++11 auto 키워드 정리를 마치겠습니다.


제 글이 도움이 되셨거나 공감이 되시는 부분이 있으셨다면, 밑에 있는 공감 버튼 한 번씩 꾸욱 눌러주시면 감사하겠습니다.


공감 버튼은 저에게 큰 도움이 됩니다. 감사합니다.






댓글