Coding/Tip !!

C++ auto 키워드 사용하기

IMyoungho 2018. 9. 19. 14:59

auto 키워드

선언 지정자인 auto 키워드는 초기화시에 초기화 값에 맞춰 자동으로 자료형을 판단하는 기능을 가진다.


해당 키워드를 사용할 때의 주의점은 선언만하고 초기화를 하지않으면 사용이 불가능하다.

-> 이유는 당연히 초기화된 값을 기준으로 자료형을 선택하기 때문이다.


1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main(){
 
    auto a = true;
    auto b = 1;
    auto c = 'c';
    auto d = "hello world";

  auto e; (x)

    return 0;
}



이건 그냥 Tip인데 출력 시에 자료형을 나타내고 싶을경우


typeid(변수이름).name( ) 을 해주면 자료형이 출력된다.



auto 사용 예시

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
 
using name space;
 
{
 
    //변수를 초기화 값으로 사용가능
    int a = 7;
    int b = a; // a의 자료형을 기준으로 설정됨
 
 
    //포인터와 참조자를 붙일 수 있음
    auto c = 1.2;
    auto &= c;
    auto *= &c;
 
    //구조체나 공용체, 클래스도 가능함
    class test{
        int a ;
    }tt;
 
    auto z = tt;
 
    //함수포인터나, 함수 자체도 가능함 -> 이러한 함수를 람다 함수라고 함
    //함수 포인터 -> 구조체나 클래스의 함수 포인터도 가능
    int test(int a){return a);
    int main(){
        auto b = test;
        cout << b(7<< endl;
        return 0;
    }
 
    //함수 (매개변수 없을 시)
    int main(){
        auto test = []{cout << "hello wolrd" << endl;};
        test();
        return 0;
    }
 
    //함수 (매개변수 존재 시)
    int main(){
        auto test2 = [](int a){return a;};
        cout << test2(7<< endl;
        return 0;
    }
 
    //함수 (함수 내부에서 외부의 지역변수 참조 시 [ ]안에 &를 사용함)
    int main(){
        int b = 7;
        auto test2 = [&](int a){b+a;};
        return 0;
    }



1
2
3
4
5
6
7
8
    //함수 (참조자 리턴 시)
    //함수의 인자가 속한 괄호에 -> 를 명시해주고 리턴자료형 &를 붙여줌
    //참조자 외에는 자료형을 명시하지 않아도 return값을 기준으로 auto 자동으로 리턴자료형을 판단함
    //이 때 주의점은 auto&를 하게 되면 함수의 참조자가 되는 것이지 리턴형의 참조자가 되는 것은 아님!
    int main(){
        auto test = [](int *a)->int&{return *a;};
        return 0;
    }





auto 사용 시 주의사항

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
using namespace std;
 
//리턴형으로 사용이 가능함
 
auto test() { // (X) 후행 반환 형식 지정이 안했음으로 에러발생!!
    return 7;
}
  
auto test()-> int// (O)
    return 7;
}
    
리턴형으로 이용할 시에는 template를 같이 사용해주자!
//decltype은 내부의 결과에 따라 자료형을 다르게 반환해줌
//test 함수의 인자로 들어온 것이 int와 double이면 decltype의 변수 연산 시 double되며
//해당 함수는 double을 리턴함
//test 함수는 decltype으로 리턴 자료형을 예측하게 해주는 함수이다.
template<typename A, typename B>
auto test(A a, B b) -> decltype(a+b){
    return a+b;
}
 



auto 키워드는 함수 매개변수로 사용할 수 없음

auto 키워드는 구조체나 클래스의 맴버변수로 사용 불가능함(해당객체 자료형 크기를 모르기 때문에)

가독성이 떨어짐으로 적당하게 사용해야함~!


또 다른 예시

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
using namespace std;
 
int main(){
    array<int , 5> test = { 12345}
    
    for ( auto &element :  test) //&는 복사를 없애 속도를 줄이기위한 
        cout << element << " " ;
    cout << endl;
}
 



이런식으로 이용하면 for문을 출력할 때 조금 더 편리하게 사용이 가능함


반응형