Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

데블스캠프2017/당신이들어보지못한C++이야기: Difference between revisions

From ZeroWiki
({CREATE})
 
No edit summary
Line 1: Line 1:
= 서기 =
당신이 들어보지 못한 C++ 이야기
* 봉봉의 봉봉를 위한 봉봉에 의한


이곳에 적어주세요
휴학을 해보세요
 
__TOC__
 
== auto ==
* 마법의 키워드
* 컴파일 타임에 변수의 타입을 연역
* 사용하면 좋은 경우
** 템플릿 등을 사용하여 타입명이 길어질 때
** 타입이 명확하지 않은 경우
* 위 상황 이외에 사용하면 읽기가 더 난해해진다.
* auto를 사용한 새로운 함수 선언법
** 임의의 (같은 형이 아닌) 두 변수의 합을 구하는 함수?
** auto function -> decltype
** C++ 14부터는 그냥 auto로 (단, 재귀로 사용할 경우 첫번째 return 형)
** decltype(auto)도 가능해 짐
== 람다 표현식 ==
* 익명 함수를 인라인으로 작성
* [] 와 { }
* [] 캡쳐블록
** 지정한 scope에서 값들을 복사
** 원본갑소가 같은 지정자를 가진다 (const .. )
** ex) [[=]], [[&]], [[::X,&y x, &y]], [[::=,&x,&y =, &x, &y]]
* [[캡쳐블록]](파라미터 목록) MUTABLE 익셉션목록  속성지정 -> 리턴타입 {함수바디}
* 제너릭 람다 표현식
** 타입 추론 기능 지원 - 템플릿 인자 추론과 동일
* 캡쳐 표현식 -> scope 내에 있지 않더라도 포함 가능
* 템플릿 함수의 반환형 또는 파라미터로 사용
== 우측값 ==
* 상수값, 임시 객체(객체 반환값, 값으로서 객체를 파라미터로 사용) 등을 지칭
* rvalue reference를 나타내기 위해 &&를 사용
* std::move()를 통해 lvalue를 rvalue로
* 이동 시맨틱
** 새로운 heap 영역을 할당하지 않고---------------------
== 스마트 포인터 ==
* 포인터를 관리하여 에일리어싱을 방지
* 레퍼런스 카운터를 내부적으로 가짐
* 이가 0이 될 때, 자동으로 delete 해준다.
* unique_ptr
** 레퍼런스 카운터 지원 x, 단독 소유권, 스코프를 벗어나면 바로 해제
** 스택 기반의 객체 인스턴스를 동적으로 할당할 때 유용
** c 스타일 배열 저장
** C++ 14에서 추간된 MAKE_UNIQUE()
* shared_ptr
** 레퍼런스 카운터 지원, 스레드 세이프
** MAEK_SHARED()
** 추가적으로 타입캐스를 하기 위한 함수를 제공
** c 스타일 배열 저장 x
* weak_ptr
** shared ptr을 관리하는 포인터를 담을 수 있ㅇㅁ
** shared_ptr이 소 --------------
** 포인터에 접근하기 위해서는 shared_ptr로 변환해야 하는데,
** lock()
** 생성자에 weak_ptr를 인자로
 
== 예외처리 ==
* 생성자에서 발생하는 에러
** 기본적으로 스마트 포인터를 사용하면 해결 가능
** 초기화 리스트에서 에러 -> 함수 try 블록으로 해결
** 몇 가지 주의점이 있지만,
** 초기화 리스트에서 발생한 익셉션을 다른 익셉션으로 변환해서 던질 때
** 에러 메세지 로깅
** 익셉션 발생 전에 이미 할당된 메모리를 해제할 때
* 소멸자에서 발생하는 에러
** 내부에서 처리해야 한다.
** -----------------
== 마치며 ==
* 어렵고 난해한 언어이지만,
* 애정을 갖고 배웁시다



Revision as of 08:53, 28 June 2017

당신이 들어보지 못한 C++ 이야기

  • 봉봉의 봉봉를 위한 봉봉에 의한

휴학을 해보세요

auto

  • 마법의 키워드
  • 컴파일 타임에 변수의 타입을 연역
  • 사용하면 좋은 경우
    • 템플릿 등을 사용하여 타입명이 길어질 때
    • 타입이 명확하지 않은 경우
  • 위 상황 이외에 사용하면 읽기가 더 난해해진다.
  • auto를 사용한 새로운 함수 선언법
    • 임의의 (같은 형이 아닌) 두 변수의 합을 구하는 함수?
    • auto function -> decltype
    • C++ 14부터는 그냥 auto로 (단, 재귀로 사용할 경우 첫번째 return 형)
    • decltype(auto)도 가능해 짐

람다 표현식

  • 익명 함수를 인라인으로 작성
  • [] 와 { }
  • [] 캡쳐블록
    • 지정한 scope에서 값들을 복사
    • 원본갑소가 같은 지정자를 가진다 (const .. )
    • ex) =, &, [[::X,&y x, &y]], [[::=,&x,&y =, &x, &y]]
  • 캡쳐블록(파라미터 목록) MUTABLE 익셉션목록 속성지정 -> 리턴타입 {함수바디}
  • 제너릭 람다 표현식
    • 타입 추론 기능 지원 - 템플릿 인자 추론과 동일
  • 캡쳐 표현식 -> scope 내에 있지 않더라도 포함 가능
  • 템플릿 함수의 반환형 또는 파라미터로 사용

우측값

  • 상수값, 임시 객체(객체 반환값, 값으로서 객체를 파라미터로 사용) 등을 지칭
  • rvalue reference를 나타내기 위해 &&를 사용
  • std::move()를 통해 lvalue를 rvalue로
  • 이동 시맨틱
    • 새로운 heap 영역을 할당하지 않고---------------------

스마트 포인터

  • 포인터를 관리하여 에일리어싱을 방지
  • 레퍼런스 카운터를 내부적으로 가짐
  • 이가 0이 될 때, 자동으로 delete 해준다.
  • unique_ptr
    • 레퍼런스 카운터 지원 x, 단독 소유권, 스코프를 벗어나면 바로 해제
    • 스택 기반의 객체 인스턴스를 동적으로 할당할 때 유용
    • c 스타일 배열 저장
    • C++ 14에서 추간된 MAKE_UNIQUE()
  • shared_ptr
    • 레퍼런스 카운터 지원, 스레드 세이프
    • MAEK_SHARED()
    • 추가적으로 타입캐스를 하기 위한 함수를 제공
    • c 스타일 배열 저장 x
  • weak_ptr
    • shared ptr을 관리하는 포인터를 담을 수 있ㅇㅁ
    • shared_ptr이 소 --------------
    • 포인터에 접근하기 위해서는 shared_ptr로 변환해야 하는데,
    • lock()
    • 생성자에 weak_ptr를 인자로

예외처리

  • 생성자에서 발생하는 에러
    • 기본적으로 스마트 포인터를 사용하면 해결 가능
    • 초기화 리스트에서 에러 -> 함수 try 블록으로 해결
    • 몇 가지 주의점이 있지만,
    • 초기화 리스트에서 발생한 익셉션을 다른 익셉션으로 변환해서 던질 때
    • 에러 메세지 로깅
    • 익셉션 발생 전에 이미 할당된 메모리를 해제할 때
  • 소멸자에서 발생하는 에러
    • 내부에서 처리해야 한다.
    • -----------------

마치며

  • 어렵고 난해한 언어이지만,
  • 애정을 갖고 배웁시다