ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 순환 참조가 발생하지 않도록 소유권을 주장하지 않는다.

     

    댓글

Designed by Tistory.