일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UE5
- Programmers
- UnrealEngine5
- IFileDialog
- RootMotion
- 2294
- DirectX11
- UnrealEngine4
- DeferredRendering
- C++
- 줄 세우기
- 팰린드롬 만들기
- 언리얼엔진5
- softeer
- 백준
- NRVO
- const
- 1563
- RVO
- 오블완
- winapi
- GeeksForGeeks
- baekjoon
- Unreal Engine5
- Frustum
- algorithm
- C
- directx
- 티스토리챌린지
- 프로그래머스
- Today
- Total
목록const (3)
Game Develop
const는 결국 사람의 실수를 막기 위한 것이다. 없어도 동작은 당연히 한다. 말했다시피 당연히 실수를 방지하기 위함이다. 실수를 미리 방지할 수 있으면 개발시간도 단축될 수 있는 가능성이 있기 때문에 생산성에까지 영향을 끼친다 볼 수 있다. 미리 함수파라미터에 const로 해놓으면, 함수내부로직을 작성할 때 무의식적으로 해당 매개변수값을 변경하려 하면, 에러를 띄워주니 말이다. 만약 const로 안해놨으면 좀더 나중에서야 알아차리겠지. 그래서 이펙티브 c++ 책이라던가 다른 개발자분들께서도 코딩스탠다드에 c++를 적극 사용하라는 말들이 있다. 레퍼런스는 불필요한 복사를 방지하기 위함이다. 게임개발을 하다보면 위치값이나 회전값같이 벡터값을 넘겨야하는 경우가 많은데, 그냥 초보자강의용이라던지 그런 영상 ..
main함수에서의 Test클래스의 GetName함수는 에러가 안나는데, foo함수에서의 GetName은 위와같은 에러가 뜬다. 그 이유는 main함수에서의 t라는 Test객체는 const 객체가 아니고, foo함수에서의 레퍼런스로 받은 t는 const 객체이기 때문이다. const객체는 내부 값의 변경이 불가능하다. 그렇기 때문에 해당 객체가 하는 모든행위는 기본적으로 객체의 값이 변경이 되지 않는다는 '보장'을 받아야 한다. 그 보장을 받기위한 방법 중 하나가, 멤버함수의 선언 끝에 const키워드를 붙이는 것이다. 멤버함수의 뒤에 const키워드가 붙는다면, 해당 멤버함수내에서는 멤버변수에 값을 write하는 행위는 할 수 없다. 그렇기 때문에 foo함수에서의 GetName은 위와 같은 에러를 뱉는 ..
Example 1. const키워드가 *앞에 선언될 경우 -> Heap에 락걸려있다는 느낌 int num1 = 4; int num2 = 61; const int* pNum = nullptr; pNum = &num1; // 정상적으로 수행 *pNum = 10; // Error const키워드가 *앞에 선언될 경우, 참조하는 값이 상수화된다. 그렇기때문에 pNum이라는 포인터변수의 값이 변경되는거는 상관없지만, 포인터가 가리키고있는 값의 변경에는 에러가 뜬다. Example 2. const키워드가 * 뒤에 선언될 경우 -> Stack에 락걸려있다는 느낌. int num1 = 4; int num2 = 61; int* const pNum = nullptr; pNum = &num1; // Error *pNum =..