일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래밍 기초
- Three(Two) Tone Shading
- 게임 수학
- OculusMotionVectorPass
- AppSW
- Cartoon Rendering
- ASW(Application SpaceWarp)
- VR
- 메모리 누수
- Cell Shader
- 가상 바이트
- Windows Build
- 벡터
- working set
- Private Bytes
- Specular
- URP
- Virtual Byte
- ColorGradingLutPass
- 3d
- Cell Look
- Toon Shader
- Rim Light
- 작업 집합
- C언어
- URP로 변경
- 개인 바이트
- Today
- Total
WinCNT
Modern C++ - Auto 본문
auto 키워드는 어떻게 생겨났을까?
C언어는 운영 체제(유닉스)를 만들기 위해 만든 언어
자료형도 운영 체제 제작 시, 프로그래머의 실수를 알 수 있도록 만들어 진 것
자료형으로 데이터들을 구분하면, 컴파일 에러 등으로 버그를 미리 파악할 수 있게 되고
결과적으로 런타임 에러를 줄일 수 있게 된 것이다
그러므로 프로그래밍할 때의 원칙은 자료형을 명확하게 하는 것이라 할 수 있다
반대로, 타입을 맞출 필요가 없는 경우에는 auto를 사용하여 생산성을 높일 수 있다
함수의 리턴 값을 auto로 받거나(C++ 18부터는 리턴에 auto 사용이 가능해짐),
긴 자료형을 축약하거나(std 사용 시 편리함) 등등
auto 키워드의 사용 예
std 사용 시 auto를 사용하면 편리하다(특히 iterator와 같은 복잡한 이름)
std::vector<int> v = { 1, 2, 3, 4, 5 };
//for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {}
for (auto it = v.begin(); it != v.end(); ++it){ }
템플릿을 사용한 클래스 등에 auto을 사용하면 축약할 수 있다
//MyArr<int>* a = new MyArr<int>(10);
auto* a = new MyArr<int>(10);
선언이 복잡한 함수 포인터에 auto를 사용하면 쉽게 선언할 수 있다
//int (*funcPtr)(int, int) = add;
auto funcPtr = add;
auto result = funcPtr(1, 2);
함수의 return 값 등도 auto로 받을 수 있다
auto sum = add(3, 5);
함수의 리턴 타임에도 auto를 사용할 수 있다(C++ 18 즈음 이후)
auto addRetAuto(int x, int y) { return x + y; } // C++ 18 즈음에 가능해짐
람다식의 리턴 타입에도 auto를 사용할 수 있다
또한 람다식의 매개변수에는 예외적으로 auto를 사용할 수 있다
auto test = [](int* a)->int& {return *a; };
auto func = [](auto x, auto y) {return x + y; };
std::cout << func(11., 5) << " " << func(3.7, 23.1) << std::endl;
auto 키워드를 좀 더 명확하게 사용하는 방법
포인터나 참조형을 auto로 받을 경우, 코드의 명확성이 떨어진다
가능한 한 auto에 포인터나 참조형을 붙여서 코드를 명확하게 해준 것이 좋다
Cat* myCat = new Cat("CoCo", 2);
//auto myCat = myCat;
auto* myCatPtr = myCat;
auto& myCatRef = myCat;
auto는 const를 무시하므로 포인터나 참조형과 마찬가지로 명확하게 붙여주는 것이 좋다
(volatile등의 키워드도 마찬가지임)
const int b = 1;
auto a1 = b; // a1은 int
const auto a2 = b; // a2은 const int
auto& a3 = b; // a3는 const int&
const auto& a4 = b; // a4는 const int&
volatile int vx = 1024;
auto avx = vx; // int
volatile auto vavx = vx; // volatile int
포인터와 참조형의 인수 차이
포인터의 경우는 간접 전달으로 객체에 접근하려면 한 번 더 찾아야 한다(*p 등)
참조형의 경우는 객체 그 자체에 접근 가능함
SSS
'게임 프로그래밍(학습 내용 정리) > Modern C++' 카테고리의 다른 글
배열 포인트와 _countof(혹은 ARRAYSIZE) (0) | 2022.06.14 |
---|---|
스마트 포인터 - unique_ptr (0) | 2022.04.21 |
스마트 포인터 (0) | 2022.04.14 |
decltype과 Value Category(lvalue, rvalue, xvalue) (0) | 2022.03.24 |
범위 기반 for문 (0) | 2022.03.24 |