C++(13)
-
[C/C++] 라이브러리
라이브러리: 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 파일 - 정적 라이브러리(Static Linked Library, SLL): 실행파일 안에 라이브러리를 하나로 묶인다는 특징. 정적 라이브러리 파일(*.lib)을 만들고, 이 파일을 사용하는 측에서 헤더파일과, #pragma comment 혹은 프로젝트 속성 창의 링커-입력-추가종속성에서 라이브러리 경로를 입력하면 된다. 실행 파일을 만들 때 링커가 .lib 파일과 컴파일된 *.obj 파일을 링크하여 실행파일을 만들어낸다. -동적 라이브러리(Dynamic Linked Library, DLL): 실행파일 안에 포함되지 않고, 프로그램 실행 시에 참조된다. 따라서 실행 파일의 크기를 상대적으로 작게 만들고,..
2023.05.10 -
[C++] 모던 C++(C++11) 기초
1. auto 키워드 : 타입을 추론(type deduction)하는 역할을 한다. 기본 auto는 const, &(참조) 를 무시하기때문에 조심해야한다. 가독성이 나빠지기 때문에, 타이핑이 지나치게 길어지는 경우에만 사용한다. 2. 중괄호 초기화 stl vector와 같은 Container에서 유용하게 사용할 수 있다. 축소 변환을 방지한다. (int > double 불가능) 만든 클래스에서 중괄호 초기화를 통한 생성자를 받아주고 싶다면, initialize_list를 인자로 하는 생성자를 정의해야 한다. 이 때, 다른 생성자보다 initialize_list 생성자가 우선순위가 더 높으므로, 다른 생성자가 무시될 수 있다. (주의!) 3. nullptr 그저 0의 의미를 갖는 NULL과 다르게, nul..
2023.05.09 -
[C&C++] const 키워드
const는 변수를 상수화시켜주는 키워드이다. (msdn왈, const 변수의 값이 상수임을 지정하고 프로그래머가 수정하지 못하도록 컴파일러에 지시하는 키워드) 그렇다면, const 변수가 선언된 메모리를 참조해서 값을 바꾸면 어떻게 될까? int main() { const int a = 5;//a const로 선언 int b = 4;//b 변수 선언 int* c = &b; c= c-2;//포인터 c로 a의 메모리 영역을 가리키게 한다. *c = 2;//a의 메모리 공간을 2로 바꾼다. printf("%d\n", a);//a값을 출력한다. printf("%d\n", *c);//c 포인터가 가리키는 값을 출력한다. return 0; } 이 코드를 실행하면, 실제로 메모리 공간이 바뀐다. 그러나, 컴파일러에..
2023.04.25 -
[C/C++] 소켓 API
소켓 API 정리 SOCKET socket(int af, int type, int protocol) : 소켓 생성 인자: af: AF_INET(IPv4), type: SOCK_STREAM(TCP), SOCK_DGRAM(UDP), protocol: 0(TCP,UDP) 반환: 소켓 생성 int closesocket(SOCKET s) : 소켓 닫기 인자: s: 닫을 소켓 반환: 성공: 0, 실패: SOCKET_ERROR int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData) : Winsock DLL 사용 시작 인자: wVersionRequested(버전.MAKEWORD(2,2)), lpWSAData(WSADATA 변수의 주소) 반환: 성공:0, 실패:오류코드..
2023.04.06 -
[C++] 템플릿
클래스나 함수에 템플릿을 이용하여 여러 자료형에 대해서 동일한 작동을 하게 만들 수 있다. 보통 자료구조에서 잘 사용된다. 컴파일 과정에서 Call이 일어난 해당 템플릿 타입에 대한 함수가 실제로 생성된다. 따라서 헤더파일과 cpp파일로 선언 / 정의를 나눌 수 없다. 또한 템플릿 코드 블럭 내에서는 실제 함수가 아니기 때문에 인텔리센스가 작동하지 않는다. 템플릿 선언시, template 이런식으로 매개변수처럼 활용할 수도 있다.
2022.01.07 -
[C++] 형 변환 연산
C++로 개발할 때는, 형 변환시에 C스타일의 괄호 대신 형 변환 연산자를 사용하는 것이 바람직하다. 형 변환 연산자 컴파일 타임 런 타임 dynamic_cast 부모, 자식 관계 허용, 클래스 타입만 실제로 캐스팅 가능한지 검증 static_cast 부모, 자식 관계 허용, 원시 타입 / 클래스 타입 모두 가능 x reinterpret_cast (=C 스타일) 모두 허용 x const_cast const를 붙이거나 뗀다. x 가장 많이 사용하는 static_cast와 dynamic_cast의 차이점은 런타임에 캐스팅이 가능한지 검증을 하느냐, 마느냐다. (원시 타입 지원 여부도 다르다.) dynamic_cast의 경우 컴파일 타임에는, static_cast와 동일하게 상속관계가 있다면 오류가 나지 않는..
2022.01.07