본문 바로가기

메모장/C++

[C++/etc] 키워드 사전 (수정중)

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 

 

Rvalue 참조 선언자: &&

자세한 정보: Rvalue 참조 선언자: &&

learn.microsoft.com

std::forword : value type을 원하는 형식으로 전달해준다. 아래 링크 참조

https://modoocode.com/302

 

C++ 레퍼런스 - std::forward 함수

 

modoocode.com

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 

 

remove_reference 클래스

자세한 정보: remove_reference 클래스

learn.microsoft.com

 

------------------------------------------------------------------------------------------

Project Management

pch : precompiled header
- 컴파일 시간을 줄이기 위해 미리 컴파일 된 헤더 파일

RAIIResource 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)  (3) 2020.11.18
[C, C++] 표준 입출력 실험 (scanf)  (0) 2019.09.03
C++/STL List를 순회하는 방법  (0) 2019.05.24