ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++ auto 키워드 사용하기
    Coding/Tip !! 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문을 출력할 때 조금 더 편리하게 사용이 가능함


    반응형

    'Coding > Tip !!' 카테고리의 다른 글

    Header Gurad  (0) 2018.10.02
    c++ 동적 배열 사용 vector  (0) 2018.09.19
    c++ 정적 배열사용 array  (0) 2018.09.19
    함수의 인자 사용 시, 레퍼런스 이용하기!  (0) 2018.09.19
    foo 함수  (0) 2018.09.19

    댓글

Designed by Tistory.