c++11 4

C++ 11 universal reference, std::forward

C++11부터 rvalue reference를 지원하는 것은 이미 공부해서 알고 있었다. 그런데 rvalue reference만 공부하면 자칫 '&&가 붙으면 무조건 rvalue reference다' 라는 오류에 사로잡힐 수 있다. 사실은 그게 아니다. &&가 붙어도 lvalue reference인 경우도 있기 때문이고 그것이 universal reference의 경우이다. universal reference는 &&로 선언된 변수나 인자가 타입 추론이 필요한 경우를 의미하며 이때는 rvalue/lvalue reference 모두 가능하다. 스콧 마이어씨의 글에는 다음과 같이 적혀있다. If a variable or parameter is declared to have type T&& for some de..

공부/C || C++ 2021.07.25

C++ 11 함수 객체(Functor)와 람다 표현식(Lambda Expression)

C++11부터는 람다식(Lambda Expression)이 지원된다. 람다가 무엇인지 알아보기 전에 함수 객체(Functor or Function object)에 대해서 알아야 한다. 함수 객체란 객체를 함수 호출 연산자 '()'를 오버로딩해서 함수처럼 호출될 수 있게한 객체를 의미한다. 예를 들면 아래와 같다. class functor { public: functor() {} ~functor() {} void operator()() { std::cout 를 이용한 역참조만 가능한 iterator) 타입을 의미하며 UnaryPredicate가 위에서 언급한 단항 술어를 의미한다. 참고로 remove_if함수는 실제로 element를 삭제하는게 아니라 술어 p라는 (삭제) 조건을 만족하지 않는 elemen..

공부/C || C++ 2021.07.24

C++11 chrono

프로그램을 작성하다 보면 두가지 기능의 성능을 비교할 때 초단위로 혹은 그보다 정밀한 단위로 시간을 측정해야할 경우가 있다. C++ 11에서는 chrono 라이브러리에서 nanosecond단위의 시간 측정을 지원한다. 예를 들어서 피보나치 수열 함수를 동작하는데 걸리는 시간을 second, millisecond 그리고 nanosecond 단위로 측정해보자. #include #include long fibonacci(unsigned n) { if (n < 2) return n; return fibonacci(n - 1) + fibonacci(n - 2); } int main() { auto start = std::chrono::high_resolution_clock::now(); fibonacci(40);..

공부/C || C++ 2021.07.16

C++ 11 default, delete 키워드

C++ 11에서는 자체적으로 선언하지 않을 경우 기본 생성자, 복사 생성자, 복사 할당 연산자 및 소멸자를 자동으로 생성하고 이러한 함수는 특수 멤버 함수 라고 한다. 이런 특수 멤버 함수에는 몇가지 규칙이 있다(아래 규칙들은 microsoft docs에 있는걸 가져왔다). 생성자가 명시적으로 선언된 경우 기본 생성자가 자동으로 생성되지 않습니다. 가상 소멸자가 명시적으로 선언된 경우 기본 소멸자가 자동으로 생성되지 않습니다. 이동 생성자 혹은 이동 할당 연산자가 명시적으로 선언된 경우 다음과 같습니다. 복사 생성자가 자동으로 생성되지 않습니다. 복사 할당 연산자가 자동으로 생성되지 않습니다. 복사 생성자, 복사 할당 연산자, 이동 생성자, 이동 할당 연산자 또는 소멸자가 명시적으로 선언된 경우 다음과 ..

공부/C || C++ 2021.07.15