상수표현식 (constexpr) 은 인라인 함수와 동일한 기능을 제공한다.추가로 컴파일 단계에서 프로그래밍을 최적화하여 반환되는 값이 상수가 되는 식이다. constexpr 지정자 특징 ▶ constexpr 로 선언된 변수는 const 지정자처럼 변수를 상수로 만든다. ▶ constexpr 로 선언된 변수의 데이터를 수정하려고 하면, 컴파일러 에러를 발생시킨다. ▶ 함수 및 클래스의 생성자에도 constexpr 를 적용할 수 있다. 함수에 붙이면 inline 함수처럼 인식된다. 사용불가 ▷ goto 문 ▷ label 문 , switch-case 문 ▷ try-catch 문 ▷ static_assert 선언문 ▷ using 지시문/선언문 ▷ typedef 선언문 ▷ NULL ▷ 리터럴이 아닌 함수 내부에서..
C++11 이전 - 그냥 'C++' C++11 이후 - 모던C++ C++ 언어는 C언어가 제공하는 이식성과 높은 처리 속도를 그대로 보장하고 자 함. C언어에 없는 객체 지향 언어의 클래스와 연산자 오버로딩, 템플릿이나 예외처리 등의 개념을 도입. C++언어가 C언어 보다 느린 이유 : 템플릿이나 객체 지향 언어가 제공하는 기능에 의해 발생한다. 객체지향 언어의 특성상 데이터 타입 변환이나 다형성의 기능을 지원하기 위해, 다수의 메모리 테이블이 추가되면서 더 많은 메모리가 필요하며, 객체가 차지하는 메모리를 관리하는 기능들이 추가되면서 C언어의 프로그램보다 느려졌다. C++11 C++11 에는 STL (표준 템플릿 라이브러리 ( Standard Template Library )) , 람다, functio..
1. 값 전달 방식 2. 주소 전달 방식 3. 참조 전달 방식 주소 전달 방식( ptr ) 와 참조 전달 방식 ( ref ) 은 로우레벨 ( 어셈블리 ) 관점에서 실제 작동 방식은 디버깅을 해보면, 100% 같다 = 성능이 같다. 하이레벨 관점에서는 주소값을 넘겨주는 부분이 숨겨져 있다. // num : 저장 바구니 이름 int num = 1; // ptr : 주소를 담는 바구니 int* ptr = # *ptr = 2; // ref : num 바구니에 또 다른 이름을 부여. // num 이라는 바구니에 ref 라는 다른 이름을 지어줄게! int& ref = num; ref = 3; 그럼 ptr 와 ref 의 차이점은?? 값 전달 처럼 편리하게 사용하고, 주소 전달 처럼 주소값을 이용해 진짜( nu..

당연하지만 사소해서 실수하게 되는 부분을 정리하자면, 데이터 타입 변환이 있다. ▶ 대입 1. int 형 변수들을 short, float 등의 다른 데이터 타입으로 변환하면? 2. -1 인 int 값을 uint 에 대입한다면? int main() { int hp = 33333; short hp2 = hp;// 윗쪽 비트 데이터가 짤린 상태로 저장. 데이터 손실 float hp3 = hp;// 실수(float)로 변환할 때 정밀도 차이로 인해 데이터 손실 hp = -1; unsigned int hp4 = hp; // 비트 단위로 보면 똑같지만, 분석하는 방법의 차이 } 프로그래머 계산기로 계산해보면 알겠지만, 데이터 손실이 일어난다. ▶ 곱셈과 나눗셈 곱셈, 나눗셈을 할 때도 다른 데이터 타입의 경우를 조..

Data 영역 ◈ .data ◈ .bss ◈ .rodata 메모리 구조에서 데이터 영역에 해당하는 부분은 global variable (전역변수) , static variable (static 변수) 이다. 아래 코드를 전역 변수로 선언했다고 했을 때, 데이터 영역은 3가지 영역으로 나뉜다. .bss / .data / .rodata // .bss int a; // .data int b = 0; // .rodata const int c = 0; void main() { // stack 영역 const int d = 0; } 1) .bss 초기값 없는 경우 2) .data 초기값 있는 경우 3) .rodata 읽기 전용 데이터 단, const 의 경우 읽기 전용 데이터라고 볼 수 있지만, C++ 표준에서 꼭..
Cast 4가지 형식 ◈ static_cast ◈ dynamic_cast ◈ const_cast ◈ reinterpret_cast 1. static_cast 논리적으로 변경 가능한 경우에만 허용한다. 논리상 맞지 않는 변환을 막아준다. static_cast (변환 대상) // static_cast (11.5); 실수 → 정수 또는 정수 → 실수 변환은 가능하지만, 포인터 타입 → 정수 타입 변환은 방지한다. (가능) 부모클래스 포인터 → 부모클래스 (가능) 자식클래스 포인터 → 자식클래스 (가능) 부모클래스 포인터 → 자식클래스 (허용) 자식클래스 포인터 → 부모클래스 2. dynamic_cast 실행시간 타입정보 ( Runtime Type Information , RTTI ) 가 필요하다. dynami..

GetMessage / PeekMessage 공통점 필터 조건과 일치하는 메세지에 대한 메세지 큐를 확인한 다음, MSG 구조에 메세지를 복사한다. GetMessage 메세지가 없으면 메세지가 생길 때까지 기다린다. 필터 조건과 일치하는 메세지가 큐에 배치될 때까지 반환하지 않는다. 게임은 역동적이어야 하기 때문에 GetMessage 를 사용하는 것이 좋은 것은 아니다. scanf 또는 cin 과 같은 함수처럼 무한정 기다리는 것과 같다. GetMessage 의 특징 제거한다, 대기한다, 양보한다. PeekMessage 메세지 큐에 있는지 여부에 관계없이 즉시 반환된다. 메세지가 있으면 true 리턴, 그렇지 않으면 false 리턴. 메세지 펌프는 false 동안 계속 루프를 실행하며 그 때마다 Peek..
C/C++ 에서의 # 은, '컴파일러 지시자' 이다. 예를 들어 #include , #define, #ifdef, #endif, #if 등이 있다. 그럼 #ifdef 와 #endif 는 ? ifdef ~ endif 영역은 ifdef 바로 뒤에 매크로가 정의되어 있을 때만 컴파일 된다. (1) #ifdef __Study__ #include "study.h" #endif (2) #ifdef __Play__ Play(); #endif 이 코드는, (1) #define __Study__ 가 있으면, #include "study.h" 를 한다는 의미이다. (2) #define __Play__ 가 있으면, Play 함수를 사용한다는 의미이다. 함수 밖에서/안에서 모두 사용 가능하다. 보통은 define 매크로가 되..
- Total
- Today
- Yesterday
- SQLD40회
- 데이터베이스
- 파이썬
- BAEKJOON
- python문법
- 파이썬for문
- f-string
- 데이터 모델링
- range함수
- 백준
- SQLD1과목
- 40회 SQLD
- 별 찍기
- 파이썬입출력
- SQLD
- Python
- 백준파이썬
- SUM함수
- Unity GameObject 생성
- 파이썬문법
- 파이썬sum
- 백준별찍기
- 백준 별찍기
- python별찍기
- SQLD 2과목
- NaverCloudPlatform
- 네이버클라우드플랫폼
- SQLD 1과목
- 파이썬 입출력
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |