본문 바로가기

Programming/c++

c++비트 필드 그리고 구조체 패딩 혹시 비트 필드를 쓸 때 int를 쓰냐 unsigned int를 쓰냐에 따라 값이 완전 다르게 나올 수 있다는 거 알아? 이거 모르면 나중에 데이터 다 깨지는데, 그 이유도 알려줄까? 웅? Gemini의 응답오빠, 이거 진짜 조심해야 해! (User Summary) 대충 int 쓰다가 나중에 if (flag == 1) 같은 조건문이 안 먹혀서 며칠 동안 밤샐 수도 있거든.결론부터 말하면, 비트 필드에서는 특별한 이유가 없는 한 무조건 unsigned를 써야 해. 왜 그런지 혜지가 아주 쉽게 설명해 줄게!1. 1비트의 마법: 1이 왜 -1이 될까?컴퓨터는 정수를 저장할 때 가장 왼쪽 비트(MSB)를 **부호 비트(Sign Bit)**로 써.unsigned int a : 1;: 부호가 없으니까 1비트에 0 .. 더보기
Class 기본개념 Gemini의 응답새로운 ItemManager 클래스를 가장 깔끔하고 표준적인 기본(Default) 형태로 보여드릴게요. C++11 이후부터 권장되는 = default 문법을 사용한 구조입니다.1. ItemManager 기본 클래스 코드C++class ItemManager {public: // 기본 생성자: 객체가 생성될 때 특별한 로직 없이 컴파일러 기본 동작 수행 ItemManager() = default; // 소멸자: 객체가 메모리에서 사라질 때 정리할 것이 없음을 명시 ~ItemManager() = default; // (참고) 복사 생성자와 복사 대입 연산자도 기본값으로 설정 가능합니다. ItemManager(const ItemManager& other) = d.. 더보기
c++ 메모리 할당 new 키워드와 delete 키워드(AI와 개념서적 내용이 섞임) NEW 키워드에 함수를 붙이는것과 배열을 붙이는것의 차이점? 생성자를 NEW 키워드로 ItemManager* ptr = new ItemManager(); new 키워드는 메모리 (힙 영역)에 공간을 만든 후, 그 공간의 내용물을 주는 게 아니라 그 공간이 어디인지 알려주는 주소값을 반환 1. new type 2. new type(초기값) int* ptr = nullptr; ptr = new int(12) == *ptr = 12; 3.new type[개수] int* ptr; ptr = new int[7] 28byte; *(ptr+1) , ptr[0] 결론부터 말씀드리면, 현대 C++에서 new는 메모리 할당에 실패하면 0을 리턴하는 것이 아니라 예외(std::bad_alloc)를 던지는 것이 기본 동작.. 더보기
c++ 네임스페이스, 클래스, 구조체, 그리고 프로세스 메모리구조 Gemini의 응답C++에서 namespace, class, struct는 데이터를 구조화하고 코드를 관리하는 중요한 도구들이에요. 결론부터 말씀드리면, 범위(Scope)의 크기 면에서는 namespace > class ≒ struct 순서로 이해하시면 됩니다.구체적인 차이와 포함 관계를 표로 정리해 드릴게요.1. C++ 구조적 요소 비교표구분namespaceclassstruct주요 목적이름 충돌 방지 및 그룹화객체 지향 프로그래밍(캡슐화)데이터 묶음 (데이터 구조)기본 접근 제어해당 없음 (모두 공개)privatepublic인스턴스화불가능 (객체 생성 X)가능 (ClassName obj;)가능 (StructName obj;)포함 가능 요소class, struct, function, 변수 등멤버 변수, .. 더보기