[C++] 5

[C++ 20] Module

C++ 20의 module의 도입으로 빌드 시간이 줄어들었다. C++의 빌드 과정 1. 전처리 : #include, #define등 2. 컴파일 : obj파일 생성 3. 링크 : obj파일과 심볼, 등을 묶어서 실행파일을 만듦 -> 여기서 이런 기존 빌드 과정의 문제점 1. 너무 느린 빌드 속도(반복된 substitution) 같은 라이 파일도 클래스마다 들고 있으면 각각 오브젝트에 딸려들어가서 무거워진다. (중복으로 인클루드 되는 문제) 2. 매크로 (#define)의 사용을 지양하자..? 예) #define NUM 1 이렇게 한 파일에서 정의하고 다른곳에서 #define NUM 2 하면 다른데서 두 파일 다 인클루드하고 있을 때 NUM을 뭐로 쓸지 모름 3. 심볼의 중복 정의 보통 헤더에 함수를 선언..

[C++] 2024.11.13

CHAR/ TCHAR/ WCHAR

문자열을 표현하기 위해 사용하는 CHAR타입의 배열! 그런데 C++을 하다보면 CHAR,TCHAR,WCHAR을 혼용해서 쓸 때가 많다. 그래서 그 차이점을 비교해보려한다. 우선 아스키코드, 멀티바이트, 유니코드에 대해 먼저 보자면. 1.아스키코드(ASCII) 아스키코드는 ANSI에서 만든 미국정보교환표준부호 이다. 7비트 부호체계이며 영문 키보드로 입력할 수 있는 모든 기호들을 128개로 나타내긴 했지만 아스키코드의 모든 문자크기는 1byte로 2byte 이상의 코드를 표현할 수 없었다. 2.멀티바이트 문자 집합. 멀티바이트 문자 집합은 아스키코드(1byte)에 다른문자(2byte)등을 포함한 문자 집합이다. 그래서 한 문자가 영어일땐 1byte이며 상황에 따라 2byte이상이기도하다. 즉, 특정 문자 ..

[C++] 2022.04.21

Modern C++ #2 스마트 포인터(smart pointer)

스마트 포인터(smart pointer)왜 필요한가?c++의 양날의 검이였던 포인터. 직접적으로 메모리를 읽거나 수정할수 있는 큰 장점 엉뚱한 메모리에도 접근할 수 있다는 치명적인 단점. 메모리 오염은 너무나 큰 일이다.가장 큰 문제: 댕글링 포인터 또 메모리를 할당한 후 해제를 안하면 메모리 부족현상이 나타나고 소유권을 이전한 상태로 해제를 안하면 누수가 일어나는 문제가 있었다. 그래서 Unmanaged인 C++에 C++11부터 스마트포인터가 도입되었다. memory 헤더파일에 있어#include 를 해줘야한다. 주시대상이 있는(예-pvp게임) Knight클래스가 있다고 해보자class Knight{public: Knight() { cout_hp -= damage; cout_..

[C++] 2021.09.19

STL #1 Vector

STLStandard Template Library  벡터의 등장 배경-기본자료구조인 배열은 크기가 고정이고 한번 만들어진 순간 모든게 결정된다. 넣고싶은 원소가 많아져도 크기를 중간에 늘릴 수 없어서 새로 할당하고 다시 값을 복사해야한다.  -동적배열using namespace std;#include  vector v;v.push_back(1);v.push_back(2);v.push_back(3);const int size = v.size();for(int i=0; i cout vector의 동작원리❓배열은 어떻게 유동적으로 사용가능한가?❓capacity는 얼마나 크게 잡아야하나?❓기존의 데이터는 어떻게 처리할지? 1)메모리를 여유분을 두고 할당한다. (size보다 큰 capacity)-capacity..

[C++] 2021.08.24

포인터 1 - 포인터, 참조 기초

포인터 기초 #1 일반 변수들은 유효범위가 있다보니깐 언제 어디서든 접근하기 쉽지 않은 경우가 있다. 경우에 따라서 직접 접근해 값을 변경하고 싶을때가 있는데 이때 주로 사용하는 것이 포인터라는 주소바구니이다. 포인터는 [TYPE *]의 형태를 가지고 있으며 64비트 운영체제/x64프로그램에서는 8바이트며 32비트 운영체제나 x86에선 4바이트 고정크기이다. 포인터변수 이름앞에 *를 붙여서 주소바구니가 가리키는 주소로 가서 무언갈 할수 있다. *이 변수 선언에 붙으면 주소를 저장하는 바구니란 뜻이고 사용할때 붙으면 포탈을 타고 순간이동하란 뜻이다. 포인터변수의 크기는 고정인데도 TYPE은 왜 붙여주냐묜 주소에 가서 얼마만큼 읽어야할지를 알려준다. int* ptr = &number; int value1 =..

[C++] 2021.08.24