[C++ Tips] 클래스/구조체 멤버 정렬
아래의 글을 참고하면 된다 https://motivelessstudy.tistory.com/209 [C] 바이트 정렬 바이트 정렬 요구사항 시스템 별로 메모리에 효율적으로 접근하기 위해서 n 바이트 배수인 시작 주소에서만 메모리 접근이 가능하게끔 한다 예를 들어, x86 시스템은 4바이트 단위로 읽어오고 4 motivelessstudy.tistory.com
아래의 글을 참고하면 된다 https://motivelessstudy.tistory.com/209 [C] 바이트 정렬 바이트 정렬 요구사항 시스템 별로 메모리에 효율적으로 접근하기 위해서 n 바이트 배수인 시작 주소에서만 메모리 접근이 가능하게끔 한다 예를 들어, x86 시스템은 4바이트 단위로 읽어오고 4 motivelessstudy.tistory.com
switch case의 예시 코드는 아래와 같다 #include #include int main() { int x = 0; switch (x) { case 1: // break; case 2: // [[fallthrough]] case 3: // break; default: // } } 위의 코드 내부는 아래와 같다 if (x
유닛테스트는 구현된 부분을 테스트하며 버그를 수정하여 로직의 완성도를 높이는 것이다 유닛테스트의 장점은 초기 단계에서 버그를 잡을 수 있고 샘플 코드의 역할을 한다 또한, 유지 보수를 쉽게 만들어준다 C++에서 Unit Test를 하기 위해서는 Google Test를 이용하는 방법이 있다 이는 빌드해서 바이너리를 실행해야 테스트가 가능하다는 복잡함이 있지만 Unit Test는 그만큼 중요하기 때문에 필수불가결하게 여겨지고 있다 간단한 예시는 아래와 같다 // GameLogic.h #pragma once class Enemy { public: float health; }; class Player { public: void Attack(Enemy& enemy, float damage); }; // GameL..
constructor에서 initializer list를 사용하면object를 더 효율적으로 생성할 수 있다 # 내부에서 선언 vs. initializer list내부에서 선언하는 코드는 아래와 같다class A{public: A() { m_b = B("param"); } private: B m_b;}; A의 멤버변수인 m_b가 만들어질 때, B의 constructor를 호출하며 object를 만들고A의 생성자 내부에서 "param"이 담겨있는 B의 constructor 통해 object를 만들고m_b에 copy를 한다이처럼 A의 멤버변수를 만들어내기 위해B의 오브젝트를 두 번 만들고copy도 한번 발생하니 효율이 좋지 않다 반면, initializer list를 이용하면class A{public: ..
random 한 데이터를 추출하기 위해서는 아래와 같은 방법을 자주 사용한다 #include int main() { srand(time(nullptr)); int radNum = rand() % 100; } 하지만, 이는 사실 균등한 랜덤이 아니다 예를 들어, 랜덤함수가 0부터 9까지 나오는 것이 기본이라는 가정을 한다면 이 함수를 가지고 0 ~ 3까지 나오게 하기 위해서 rand() % 4 를 하게 된다 실제로 0, 1, 2, 3의 비율이 균등하게 나오는 것이 아니라 랜덤함수를 열어보면 0, 1, 2, 3 을 통해 0, 1, 2, 3 4, 5, 6, 7 을 통해 0, 1, 2, 3 8, 9 에서는 0, 1 이처럼 균등하게 나오지 않고 0, 1의 비율이 높은 상태가 된다 따라서 모듈레이션을 통해 랜덤함수..
const는 최대한 많이 사용하는 것이 좋다또한, C++ 17부터는 컴파일 타임에 변수를 아는 경우에는 constexpr를 사용하면 된다 const를 많이 사용하는 것은 성능의 이점 때문이 아니라실수 확률을 줄여주고 더 안전하게 사용하기 위해서이다 # const 예시 1#include int main(){ int a = 0; a = 1; a = 2; const int a = 0; const int b = 1; const int c = 2; // 변수의 재사용을 최소화 const int d = get_integer();// 해당 함수에 불러진 값이 유지되니 안전함 constexpr int e = 3; // 컴파일 타임에 값을 아는 경우} # const 예시 2 - 클래스 member#include #in..