프로그래밍 기초/C++

[C++ 14] C++ 기초 / 추가된 기능과 기억해야 할 내용

niamdank 2022. 5. 21. 16:54

  C++ 기초 

리터럴

+ 2진수 표현 접두사가 추가되었다.

접두사 진수 타입 예제 10진수 값
없음 10진수 11 11
0 8진수 011 9
0x 16진수 0x11 17
0b 2진수 0b11 3

 

+ 길이가 긴 리터럴의 자릿수를 표현할 수 있도록 작은따옴표(')로 자릿수 구분이 가능해졌다.


long d = 6'546'687'616'861'129l

unsigned long ulx = 0x139'ae3b'2ab0'94f3;

int b = 0b101'1001'0011'1010'1101'1010'0001;

const long double pi = 3.141'592'653'689'793'238'462l;


 

축소하지 않는 초기화

= 큰 값을 작은 크기의 변수로 초기화할 때 축소 변환하지 않고 오류를 발생시키는 초기화 방식이 존재한다.


long l = 1234567890123; // 축소 변환 후 대입 진행

long l2 = { 1234567890123 }; // 에러 발생

long l3 { 1234567890123 }; // l2와 동일한 의미, 에러 발생


 

표현식

+ C#의 foreach와 같은 범위 기반 for 문이 추가되었다.

for (값 : 값 배열) 형식으로 사용한다.


int primes[] = { 2, 3, 5, 7, 11, 13, 17, 19 };

for (int i : primes)

    std::cout << i << " ";


 

오류 처리

= 특정 함수가 오류를 던지지 않도록 지정하는 키워드(noexcept)가 존재한다.


double square_root(double x) noexcept { ... }


 

+ 컴파일 타임에 코드를 검사할 수 있는 키워드(static_assert)가 추가되었다.

기존의 assert는 런타임에서 오류를 감지했다면 static_assert는 컴파일 타임에 오류를 감지한다.

 

포인터

= 기존의 0 또는 NULL을 nullptr로 대체하는 nullptr이 존재하며 {}로 초기화가 가능하다.


int* ip3 = nullptr;

int* ip4{ };


 

스마트 포인터

= 포인터를 적절하게 관리하기 위한 포인터 타입이 존재한다.

스마트 포인터 타입 설명
unique_ptr 포인터를 유일하게 한 곳에서만 사용할 수도록 하여 이동만 가능하다.
shared_ptr 포인터를 여러 곳에서 참조할 수 있도록 하고 참조가 없어지면 메모리를 해제한다.
weak_ptr 순환 참조가 발생하지 않도록 소유권을 주장하지 않는다.