C++ 11/14/17/...의 키워드

2021. 12. 24. 01:30·C++
반응형

1. auto : 데이터 형을 자동으로 추론

- 컴파일 동안 데이터 형이 결정이 된다.

- 따라서, 반드시 auto 변수를 초기화해야한다.

- Javascript의 동적으로 자료형이 바뀌는 것과는 다르다.

포인터 받을 때 : auto 또는 auto* (확실히 구분하는 것이 좋다. 모호한 상황에서 가독성이 좋지 않기 때문)

참조를 받을 때 : auto& (&가 없으면 컴파일러가 구분을 못하기 때문에 당연하게 &를 붙여야 한다)

const 참조를 받을 때는 const auto&를 사용하자(이 것도 가독성이 안좋아진다.)

auto는 타이핑을 줄여주는 대신 가독성을 떨어트린다. => 몇 개를 제외하고 auto보다 실제 자료형을 선호한다.

auto를 사용하는 경우

for (std::vector<int>::const_iterator it=v.begin();it!=v.end();++it) {...}

-> for (auto it=v.begin();it!=v.end();++it){...}

for (std::map<std::string,std::string>::const_iterator it = v.begin();it!=v.end();++it){...}

-> for (auto it=v.begin();it!=v.end();++it){...}

일부 템플릿형의 경우에도

MyArray<int>* a = new MyArray<int>(10);

auto* a = new MyArray<int>(10);

런타임 성능은 동일하다

 

2. static_assert : assert는 많이 사용하는 것이 유용하다.

assert는 디버그 중 문제를 잡기 위해 조건이 맞는지 확인하여 틀리면 멈추는 키워드

static_assert는 컴파일중 문제를 잡는다 assert는 실행 도중에만 잡을 수 있는 단점이 있었는데 그것을 해결

assert의 사용 방법

assert(조건); //조건이 false면 실행 멈춤

static_assert사용 방법

static_assert(조건,내용);

사용 예시 1 : 구조체 크기 확인

사용 예시 2 : 버전 확인

사용 예시 3 : 배열의 길이 확인

최대한 static_assert를 사용하자, 하지만 컴파일러가 모르는 것이면 assert를 사용하자

assert는 디버그중에(프로그램 실행 중) 문제를 포착(오직, 디버그 빌드)하지만, static_assert는 컴파일 중 포착함

 

3. default/delete

ex) Dog() = default; -> 컴파일러가 대신 기본 생성자를 만들어준다.(가독성을 위해)

C++11전 복사생성자를 막기위해서는 복사생성자를 private에 선언한다.

C++11이후

ex) Dog(const Dog& other)=delete; //컴파일러가 자동으로 생성자를 만들어 주길 원치 않는다면 delete사용

 

4. final/override

final : 클래스 상속 막기

ex) class Animal final {...}

함수 상속 막기

ex) virtual void Set(float w) final;

=> 클래스나 가상 함수를 파생 클래스에서 오버라이딩 못하도록 하는 final 키워드 (컴파일 도중 확인)

-> 가상 함수가 아니면 사용 불가능

오버라이드를 하는 경우 오버라이드를 하는데 잘못된게 없는가를 확인하기 위해 override 키워드를 사용

-> 잘못된 가상 함수 오버라이딩을 막기 위해 사용(가상 함수만 사용 가능, 컴파일 도중 검사)

 

offsetof 매크로

멤버들의 상대적 위치 구하기

#define offsetof(type,member) 로 매크로 구현이 되어있다.

직렬화, 역직렬화를 할 경우 유용하다.

특정 멤버가 본인을 포함한 자료 구조의 시작점에서 몇 바이트 떨어져있는지 알려준다.

반응형
저작자표시 (새창열림)

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

C++ STL  (0) 2021.12.27
C++ 새로운 자료형  (0) 2021.12.26
C++ STL 알고리듬  (0) 2021.12.22
C++ 탬플릿 프로그래밍  (0) 2021.12.22
C++ 15일차  (0) 2021.07.01
'C++' 카테고리의 다른 글
  • C++ STL
  • C++ 새로운 자료형
  • C++ STL 알고리듬
  • C++ 탬플릿 프로그래밍
숯불돼지왕갈비
숯불돼지왕갈비
  • 숯불돼지왕갈비
    게임 개발 공부기
    숯불돼지왕갈비
  • 전체
    오늘
    어제
    • 분류 전체보기 (303) N
      • 학교수업 (165)
      • 취업강의 (6)
      • C++ (46) N
        • 코딩 테스트 (4)
      • Unreal Engine 5 (25)
        • MMORPG 개발 (25)
      • Unreal Engine 4 (44)
        • Omak Project (3)
        • Unreal Engine 4 개발일지 (9)
        • Unreal Engine 4 (32)
      • Unity (1)
        • 개발 일지 (1)
      • 수학 (3)
        • 소프트웨어 공학용 수학 (3)
      • DirectX 11 (4)
      • 게임 디자인 패턴 (2)
      • 포트폴리오 (1)
      • 자격증 (1)
        • 정보처리기사 (0)
        • SQLD (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
숯불돼지왕갈비
C++ 11/14/17/...의 키워드
상단으로

티스토리툴바