728x90
반응형

프로그래밍 지식/Effective Modern C++ 4

Effective Modern C++, 항목 5 : 명시적 형식 선언보다는 auto를 선호하라

C++11 부터 auto가 생겨나면서 아래의 문제점들이 해결되었다. 초기화되지 않는 변수를 컴파일러가 에러로 잡지 않는다. => auto 키워드로 변수를 선언하려면 무조건 초기화를 해야함. int x; // 문맥에 따라 초기화 안됨 auto x2; // 오류! 초기치가 꼭 필요함 auto x3 = 0; // 양호함 값의 형식이 간단하지 않다. => auto 는 type deduction을 통해 타입을 줄여줌 template void dwim(It b, It e) { for (; b != e; ++b) { typename std::iterator_traits::value_type curValue = *b; ... } } template void dwim(It b, It e) { for (; b != e; ..

Effective Modern C++, 항목 20 : std::shared_ptr처럼 작동하되 대상을 잃을 수도 있는 포인터가 필요하면 std::weak_ptr를 사용하라

스마트 포인터 또다른 쓰임이다. std::shared_ptr처럼 작동하되 대상을 잃을 수도 있는 포인터가 필요하면 std::weak_ptr를 사용하라. => 즉, 객체를 접근할 수 있냐 확인하는 용이라고 생각된다. 다시 말해서 자신이 가리키는 대상이 이미 파괴되었다는 문제를 해결할 수 있어야 한다. 다시 말해서 자신이 가리키게 되어 있는 객체가 사실 존재하지 않는 상황을 검출할 수 있어야 한다. => shared_ptr을 쓰지 말라고 하는 것이 아니라 weak_ptr은 shared_ptr을 보강한다. 대체로 std::weak_ptr는 std::shared_ptr를 이용해서 생성한다. std::weak_ptr는 자신을 생성하는 데 쓰인 std::shared_ptr가 가리키는 것과 동일한 객체를 가리키나, ..

Effective Modern C++, 항목 7 : 객체 생성시 괄호와 중괄호 구분하기

C++ 11부터 객체 생성 구문이 아주 다양해졌다. 그래서 우리는 이 항목을 배우는 것이다. 일반적으로 C++11 에서는 초기화 값을 3가지 형태로 지정할 수 있다. 1. 괄호 2. 등호 3. 중괄호 int x(0); int y = 0; int z { 0 }; 사실 하나 더 있다. 등호와 중괄호를 함께 사용하는 경우다. int z = { 0 }; **위 코드는 대체로 중괄호를 단독으로 사용한 것과 동일하게 취급되어 작동한다. 위처럼 기본 타입이 아니라 사용자 정의 형식에서는 위처럼 간단하게 초기화되거나 assign이 일어나지는 않는다. 예를 들면 Widget w1; //기본 생성자 Widget w2 = w1; //복사 생성자 => w1을 w2에 대입하는 것이 아님 w1 = w2; // 이건 복사 대입 연..

Effective Modern C++ 값의 종류

이번에 Effective Modern C++ 책을 오직 나의 만족을 위해서 공부해보기로 하였다. 근데 뭐 읽는다고 내가 개발 실력이 급격하게 늘 것 같지는 않고 그냥 후두러 까보자. 까다보면 잘해지겠지.. 시작해보자 C++에서는 코드를 써놓은 것을 표현식(expression)말하는데 자주 쓰는 용어이니 기억하자. 아무튼 표현식은 2가지를 가진다. 1.Type (자료형) 2. value category(값의 종류) ?? 엥 종류가 타입 아니냐??? 물론 비슷하지만 다르다. 책에서도 다르게 분류하는데 타입: int, int*, string, const int&, int[], ... 등 우리가 평소에 알고 있는 타입 그대로다. 값의 종류: lvalue, prvalue, xvalue, rvalue, glvalu..

728x90
반응형