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 &d = c; auto *e = &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 = { 1, 2, 3, 4, 5} for ( auto &element : test) //&는 복사를 없애 속도를 줄이기위한 cout << element << " " ; cout << endl; } |
이런식으로 이용하면 for문을 출력할 때 조금 더 편리하게 사용이 가능함
반응형