-
C++ auto 키워드 사용하기Coding/Tip !! 2018. 9. 19. 14:59
auto 키워드
선언 지정자인 auto 키워드는 초기화시에 초기화 값에 맞춰 자동으로 자료형을 판단하는 기능을 가진다.
해당 키워드를 사용할 때의 주의점은 선언만하고 초기화를 하지않으면 사용이 불가능하다.
-> 이유는 당연히 초기화된 값을 기준으로 자료형을 선택하기 때문이다.
1234567891011#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 사용 예시
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#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;}12345678//함수 (참조자 리턴 시)//함수의 인자가 속한 괄호에 -> 를 명시해주고 리턴자료형 &를 붙여줌//참조자 외에는 자료형을 명시하지 않아도 return값을 기준으로 auto 자동으로 리턴자료형을 판단함//이 때 주의점은 auto&를 하게 되면 함수의 참조자가 되는 것이지 리턴형의 참조자가 되는 것은 아님!int main(){auto test = [](int *a)->int&{return *a;};return 0;}auto 사용 시 주의사항
123456789101112131415161718192021222324#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 키워드는 구조체나 클래스의 맴버변수로 사용 불가능함(해당객체 자료형 크기를 모르기 때문에)
가독성이 떨어짐으로 적당하게 사용해야함~!
또 다른 예시
123456789101112#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문을 출력할 때 조금 더 편리하게 사용이 가능함
반응형'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 댓글