-
[C++ 14] C++ 기초 / 추가된 기능과 기억해야 할 내용프로그래밍 기초/C++ 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 순환 참조가 발생하지 않도록 소유권을 주장하지 않는다.