compl

~ 연산자를 대체함

 

explicit

생성자에 붙여 암시적 형변환을 금지하고 명시적 형변환만 가능하게 만드는 용도로 사용한다.

예를 들어 Point p = 10; 의 사용을 금지하고 (int -> Point의 형변환 금지) Point p = Point(10); 만을 사용할 수 있게 한다.

 

extern

다른 파일에 선언된 함수나 변수를 참조하기 위한 용도로 사용 (사용할 전역 변수가 외부 cpp 파일에 있다는 것을 알림)

 

현재 스코프에 사용하고자 하는 함수가 없는 경우 같은 파일 내에서 현재 스코프까지 없는 함수를 참조할 수 있게 해준다.

 

friend

수평적인 클래스 간의 멤버 변수를 공유해야 할 경우 주로 사용된다.

 

private, protected로 선언된 멤버를 외부 클래스에서 접근할 수 있게 해주는 키워드

 

접근 당할 클래스에서 friend 함수, friend 클래스를 선언해주면 외부 함수와 클래스에서 접근 제한자의 영향을 받지 않고 멤버에 접근할 수 있다.

 

mutable

const 함수에서는 원래 멤버 변수의 값을 바꿀 수 없는데 mutable로 선언된 변수의 값은 바꿀 수 있다.

 

volatile

변수의 컴파일러 최적화를 제한하는 용도로 사용 (잘 모르겠음..)

 

typeid, type_info

런타임에 자료형, 개체, 표현식의 형식을 확인할 수 있다.

 

#include <typeinfo>
template < typename T >
T max( T arg1, T arg2 ) {
   cout << typeid( T ).name() << "s compared." << endl;
   return ( arg1 > arg2 ? arg1 : arg2 );
}

typeid() 함수는 추상 클래스 type_info를 구현한 객체를 반환한다.

 

noexcept (C++11)

예외를 발생시키지 않을 함수에 noexcept를 붙인다.

어떤 함수가 절대로 예외를 발생시키지 않는다는 것을 명시하면 컴파일러가 최적화를 수행할 수 있다.

 

noexcept가 붙은 함수에서 예외를 발생시키면 예외가 처리되지 않고 프로그램이 종료된다.

 

C+11부터 소멸자들은 기본적으로 noexcept이기 때문에 소멸자에서 예외를 던지면 안된다.

 

static_cast (C++11)

논리적으로 변환 가능한 타입을 변환한다.

실수 <-> 정수, 열거형 <-> 정수형, 실수 <-> 실수

상속 관계에 있는 포인터 끼리의 변환 (업캐스팅)

 

dynamic_cast (C++11)

안전한 다운 캐스팅을 위해 사용된다.

런타임 시간에 실제로 해당 타입이 다운 캐스팅 가능한지 검사하기 때문에 런타임 비용이 조금 높은 캐스트 연산자이다.

 

reinterpret_cast (C++11)

임의의 포인터 타입끼리 변환을 허용하는 캐스트 연산자

정수 계열 형식이 포인터 형식으로 변환될 수도 있다. (그 반대도 가능)

 

int 변수를 첫 번째 멤버로 갖는 구조체가 있다고 할때 구조체 변수 포인터를 int형 포인터로 형변환하면 int형 변수를 가리키는 포인터가 된다.

 

const_cast (C++11)

const 포인터와 const 레퍼런스의 상수성을 제거하는데 쓰인다.

 

alignof, alignas (C++11)

최신 컴퓨터 하드웨어의 CPU는 데이터 주소가 데이터 크기의 배수일때 효율적으로 메모리를 읽는다.

 

alignas

ㄴ 타입의 정렬 조건을 지정한다.

// alginas(4)와 alignas(alginof(float))은 동일하다.

struct alignas(32) sse_t{ // sizeof(sse_t) = 32, alignof(sse_t) = 32
    float sse_data[4];
}

alignas(64) char cacheline[64]; // alignof(cacheline) = 64

 

alignof(타입)

ㄴ 타입의 맞춤 단위를 반환한다.

 

static_assert (C++11)

컴파일 타임에 assertion을 처리할 수 있다.

템플릿 인자도 constant-expression 범주 안에 들어갈 수 있기 때문에 템플릿을 디버깅하는데 용이하다.

 

더 많은 키워드 확인:

https://docs.microsoft.com/ko-kr/cpp/cpp/keywords-cpp?view=msvc-170 

 

키워드(C++)

C++ 표준 언어 키워드, Microsoft 관련 키워드 및 컨텍스트별 키워드를 나열합니다.

docs.microsoft.com

 

'C++' 카테고리의 다른 글

C++ 동기와 비동기  (0) 2022.08.26
C++ Callable  (0) 2022.08.26
C++ RAII와 스마트포인터  (0) 2022.08.26
C++ 가상 함수, virtual 소멸자, 가상 함수 테이블, 추상 클래스  (0) 2022.08.25
C++ 템플릿, 함수 객체(Functor)  (0) 2022.08.25

+ Recent posts