ProgrammingLang/c++

[C++] The Best Parts of C++

jinkwon.kim 2022. 3. 8. 11:21
728x90
반응형

C++ 표준

- 표준은 ISO 결정

- 현재 C++20까지 나옴

 

컴파일러에서 지원하는 표준이 따로 있다. 

Q. 컴파일러와 표준의 관계 ?

= GCC 버전 마다 지원하는 표쥰이 다르다.

 

Const (C++98)

- const는 컴파일 단계서 보증한다.

- 값 초기화를 강제 한다.

 

destructor의 통해서 객체의 라이프 타임을  관리 할 수 있다.

- 해제는 destructor 에서 한다.

 

Q. std::string s{"ㅁㄴㅇㄻㄴㅇㄹ"}

=compiler가 list initialzation 으로 바꿔서 constructor에 매칭한다.

 

Template의 필요성. (C++ 98)

- Type만 바꾸면서 사용하기 위해서 사용한다. 

- 컴파일 타임에 코드가 생성된다. 

- 코드 재사용성에 좋다. 

 

enum안에서 수식을 쓸수있다. 

- template factorial

 

지역변수 리턴 하는 경우 

동적 할당된 변수를 리턴한다.

return vaule optimization.

 

vector

배열대신 써라. 

 

알고리즘을 써라

std::accumulate()

 

STL(standard Template Library)

아래 꺼를 사용하는 것이 좋다.

set<>

vectorK>

for_each

any_of

 

std::array (C++11) 

배열 사이즈를 결정하여. 생성한다. 

Q. 배열보다 뭐가 좋은가??

- list initialize를 할수 있어서 코드를 줄일 수 있다.

std::array<VT,2> data{v1, v2};

진화 버전 1

완벽한 최종 진화 버전 (Variadic Templates)

get_data의 v1까지 추가하기 위해서 params + 1 을 해주어야한다. (같은 타임만 가능하다)

 

List Initialization (C++11)

 

constexpr ( C++14)

- 컴파일 타임에 값이 결정 되어야한다. 

- const는 값은 컴파일 타임에 지정 안될수도 있다. 

   Ex) std::vector<int> ints;

         const i = ints[4]; //OK , 가변적으로 내용을 바꾸고 싶을때 

- constexport의 값은 컴파일 타임에 지정 되어야 한다.

   Ex) std::vector<int> ints;

         constexpr i = ints[4]; // error

 

auto 는 컴파이리 타임에 형식이 결정 된다. (C++11)

High order fcution construction

 

map 

 

for_ecah

 

functor 

operator()()를 사용하여 class를 함수로 만들어 버린다.

 

언제 많이 쓰나??.. for_each에서 많이 쓴다. 

 

Lambda 

functor를 대체 한다.

Lambda 재상용이 가능 하다.

 

 

Generic And Variadic Lambda

728x90
반응형