C++ keyword
volatile : compiler 최적화를 하지 않게하는 키워드
constexpr : 상수 표현식을 나타내는 키워드.
- 변수나 함수, 생성자 함수에 대하여 컴파일 타임에 평가될 수 있도록 처리해준다.
- constexpr 변수 또는 함수의 반환값은 반드시 LiteralType이어야 하며, LiteralType은 컴파일 타임에 해당 레이아웃이 결정될 수 있는 타입을 의미한다.
- 변수에 constexpr 사용시 const한정자를 암시한다. 함수에 constexpr 사용시 inline을 암시한다.
- MS문서 : https://learn.microsoft.com/en-us/cpp/cpp/constexpr-cpp?view=msvc-170
- 참고 : http://egloos.zum.com/sweeper/v/3147813
thread_local : thread loacl storage(TLS) 변수를 선언할때 사용하는 키워드.
- thread_local로 생성한 변수는 멀티 쓰레드 환경에서 쓰레드 마다 고유한 저장공간을 가짐 가짐. (ex. thread_ID)
thread_local int32 LThreadID;
variable template :
type casting
static_cast<new_type>(expression) : 변환 가능한 형태의 형변환
const_cast<new_type>(expression) : 상수성을 제거해주는 형변환
reinterpret_cast<new_type>(expression) : 임의의 포인터 타입끼리 변환 (expression에 해당하는 것을 new_type으로 비트단위로 변환)
dynamic_cast<new_type>(expression) : 부모 클래스의 포인터에서 자식 클래스의 포인터로 다운 캐스팅 (안전한 다운캐스팅) (업스케일링은 static_cast 사용)
&T : Lvalue 참조형
&&T : Rvalue 참조형
https://learn.microsoft.com/ko-kr/cpp/cpp/rvalue-reference-declarator-amp-amp?view=msvc-170
std::forword : value type을 원하는 형식으로 전달해준다. 아래 링크 참조
noexcept : 함수 인터페이스. 함수가 예외를 호출하지 않도록 명시.
int f(int x) noexcept;
------------------------------------------------------------------------------------------
C++ Library
thread : process 내에서 실제로 작업을 수행하는 주체
- Header : <thread>
#include <thread>
void func1()
{
// do something
}
int main()
{
std::thread t1(func1); // 쓰레드 생성 + 실행
t1.join(); // 쓰레드 반환 대기
t1.detach(); // 쓰레드 분리 (잊어버리고 백그라운드에서 돌아가도록 변경)
// std::this_thread : 쓰레드 관리를 위한 여러 기능 제공
}
atomic : All-Or-Nohting (원자성)
- Thread Lock에서 다루는 개념. atomic으로 선언된 변수는 원자성이 보장된다.
- Header : <atomic>
#include <atomic>
atomic<int32> atomicInt32 = 0;
mutex : Lock을 위한 장치. '임계 영역'이라고도 한다.
- 서로 다른 두 프로세스, 혹은 스레드 등의 처리 단위가 같이 접근해서는 안 되는 공유 영역을 뜻한다.
- Header : <mutex>
# include <mutex>
mutex m;
void Push()
{
m.lock();
// critical section
m.unlock();
}
future : 미래 변수. 단발성 이벤트 처리에 유용.
- Task를 비동기 또는 지연실행
- Header : <future>
#include <thread>
#include <future>
int64 Calculate()
{
// something works
}
int main()
{
// future options
// 1) deferred -> lazy evaluation 지연해서 실행하세요
// 2) async -> 별도의 쓰레드를 만들어서 실행하세요
// 3) deferred | async -> 둘 중 알아서 골라주세요
std::future<int64> future = std::async(std::launch::async, Calculate);
// TODO
int64 sum = future.get(); // 비동기로 시켜놓은 결과물을 받아옴
}
remove_reference : 레퍼런스의 참조를 제거. T의 형식이 T1&일 경우 T1으로 제공. T2일 경우 T2 그대로 제공
- Header : <type_traits>
- namespace : std
https://learn.microsoft.com/ko-kr/cpp/standard-library/remove-reference-class?view=msvc-170
------------------------------------------------------------------------------------------
Project Management
pch : precompiled header
- 컴파일 시간을 줄이기 위해 미리 컴파일 된 헤더 파일
RAII : Resource Acquisition Is Initialization
- 객체 수명을 관리하기 위한 디자인 패턴.
- 스택에 할당된 자원이 자신의 스코프를 벗어나면 메모리가 해제되며 소멸자가 호출되는 원리를 이용.
template<typename T>
class LockGuard
{
public :
LockGuard(T& m)
{
_mutex = &m;
_mutex->lock();
}
~LockGuard()
{
_mutex->unlock();
}
private:
T *_mutex;
};
------------------------------------------------------------------------------------------
spinlock : 임계구역(Critical Section)에 진입이 가능할때까지 루프를 돌며 재시도하는 방식으로 구현된 락
RTTI(Run-Time Type Information) :
'메모장 > C++' 카테고리의 다른 글
[C++] 스마트 포인터 메모 (0) | 2022.11.17 |
---|---|
[c++] async 테스트 (0) | 2021.12.15 |
[C++] 구조체의 크기 (size of struct) (4) | 2020.11.18 |
[C, C++] 표준 입출력 실험 (scanf) (0) | 2019.09.03 |
C++/STL List를 순회하는 방법 (0) | 2019.05.24 |