전체 글
-
[Effective Modern C++] using과 typedefC++/Effective Modern C++ 2022. 4. 5. 17:30
typedef는 동의어를 만들어 주는 예약어 입니다. 예를 들어 "std::unique_ptr"같은 형식이 있고, 이 형식을 여러 차례 선언해야 할 경우 코드 가독성도 떨어질 수 있고, 타이핑의 양이 매우 많아질 수 있습니다. typedef std::unique_ptr uptr_map_str_str; 이 경우, 위와 같은 식으로 형식을 축약할 수 있는 이름을 붙여주는 것이 typedef의 주요한 목적입니다. 이번 글에서는 typedef와 더불어 C++11에서 나온 새로운 별칭 선언 예약어인 using에 대하여 살펴 볼 것입니다. 1. using 더보기 using은 C++11에서 새로 추가된 별칭 선언 (Alias declaration)예약어 입니다. 이 예약어는 typedef와 기능이 동일합니다. 예를 ..
-
[Effective Modern C++] 0과 NULL과 nullptrC++/Effective Modern C++ 2022. 3. 30. 15:03
nullptr은 C++11부터 널 포인터를 지정하는 포인터 타입 입니다. 기존에 사용되는 NULL과 0은 본질적으로는 정수라는 점에서 몇 가지 문제점이 발생했습니다. 이번 글에서는 0과 NULL사용 시 발생할 수 있는 문제에 관한 예제 몇 가지를 살펴보도록 하겠습니다. 1. 오버로딩과 nullptr 더보기 예제를 살펴보도록 하겠습니다. #include void function(int a) { std::cout
-
[C++] Boost 라이브러리 설치 & Visual Studio 설정C++/미분류 2022. 3. 10. 16:02
Boost는 C++의 오픈소스 라이브러리 집합입니다. STL과의 호환성이 높은 라이브러리로, 여러 강력한 템플릿 클래스들을 제공합니다. Boost Software License라는 독자적인 라이센스를 가지고 있고, 이 라이센스는 상업적 이용을 포함한 대부분의 목적을 허용하고 있습니다. 이번 글에서는 Windows 기반의 Boost 라이브러리를 Visual Studio에서 사용하기 위한 설정에 대해 다룹니다. 1. Boost 다운로드 더보기 Boost.org에서 Boost라이브러리를 다운받을 수 있습니다. Boost C++ Libraries Welcome to Boost.org! Boost provides free peer-reviewed portable C++ source libraries. We emp..
-
[Effective Modern C++] 괄호 ()와 중괄호 {} 그리고 Uniform initializationC++/Effective Modern C++ 2022. 2. 16. 14:41
C++11부터, 객체를 생성 할 때 사용할 수 있는 구문이 다양해졌습니다. 구체적으로 아래와 같습니다. int x(0); int y = 0; int z{ 0 }; 이번 글에서는 객체의 생성에 관해서 이야기 해 보겠습니다. 1. Assignment & Initialization 더보기 배정 (Assignment)과 초기화 (Initialization)는 내장 형식에 대하여는 유사하게 작동합니다. 하지만, 그 외의 클래스에 관해서는 서로 다른 함수들을 호출하는 정도의 차이가 존재합니다. Obj o1; Obj o2 = o1; o1 = o2; 위 코드가 호출하는 함수는 아래와 같습니다. 기본 생성자를 호출합니다. 복사 생성자를 호출합니다 복사 배정 연산자 (operator=)를 호출합니다. 배정과 초기화에 대한..
-
[Effective Modern C++] auto와 std::vector, 그리고 Proxy patternC++/Effective Modern C++ 2022. 2. 14. 16:10
이전 글(auto의 사용을 고려해야 할 상황들) 에서 auto를 사용함으로써 이점이 명확한 예제들을 살펴보았습니다. 그런데, auto는 형식 연역을 사용하기 때문에 초기치가 잘못되었을 경우, 의도하지 않은 형식으로 연역될 가능성이 존재합니다. 이번 글에서는 한 예제를 살펴보며 원하지 않는 형식으로 연역되는 상황과, 그런 상황에 대한 해결법 한가지를 살펴보도록 하겠습니다. 예제를 살펴보도록 하겠습니다. class Widget; std::vector features(const Widget& w); Widget w; bool high_priority = features(w)[5]; process_widget(w, high_priority); //Do something 위 코드의 각 함수, 클래스는 다음과 같습..
-
[Effective Modern C++] auto의 사용을 고려해야 할 상황들C++/Effective Modern C++ 2022. 1. 10. 16:06
auto는 C++11에서 추가된 변수의 한 종류로써 선언과 동시에 초기화를 해야 하며, 초기화에 사용된 식에 따라 형식이 결정되는 변수입니다. 이처럼 개념적으로는 매우 간단하지만, 파고들수록 미묘한 구석이 있는 변수입니다. 초기화에 사용된 식의 형식을 그대로 가져가는 것이 아니라, 특정 규칙에 따라 형식이 결정되어 무턱대고 사용하면 원하지 않는 결과가 나오는 경우도 종종 발생합니다. 하지만, auto는 사용을 통해 얻는 이득이 명확한 용법입니다. 이번 글에서는 auto에 대해서 살펴보도록 하겠습니다. 1. auto의 선언 및 초기화 더보기 auto는 선언과 초기화를 동시에 해 주어야 합니다. 아래와 같이 선언만 했을 경우 컴파일이 되지 않습니다. int main() { auto a; auto b(1); ..
-
[Effective Modern C++] Type deduction : typeid, boost/type_indexC++/Effective Modern C++ 2022. 1. 6. 12:42
형식 연역 (Type deduction)은 소스코드에서 특정한 코드가 어떤 것으로 바뀌는 것 입니다. 여기서 '특정한 코드'란 template, auto, decltype 등 이 있으며 바뀌게 되는 '어떤 것' 에는 자료형부터, 함수, 람다식 등이 있습니다. 이전 글에서 template과 auto, 그리고 decltype을 통한 컴파일러에 의한 형식 연역을 살펴보았습니다. 컴파일러가 어떤 규칙을 통해 형식 연역을 수행하는지 아는 것도 중요하지만 그것을 확인하고 검증해야 하는 수단도 필요할 때가 있을 것 입니다. 이번 글에서는 연역된 형식을 파악하는 방법을 알아보도록 하겠습니다. 1. IDE 편집기 더보기 대부분의 IDE 편집기는 마우스 커서를 올리면 그 개체의 형식을 표시해 주는 기능이 있습니다. 다음 ..
-
[Effective Modern C++] Type deduction : decltypeC++/Effective Modern C++ 2022. 1. 4. 14:12
형식 연역 (Type deduction)은 소스코드에서 특정한 코드가 어떤 것으로 바뀌는 것 입니다. 여기서 '특정한 코드'란 template, auto, decltype 등 이 있으며 바뀌게 되는 '어떤 것' 에는 자료형부터, 함수, 람다식 등이 있습니다. 이전 두 글에서, template과 auto의 형식 연역 과정을 살펴보았습니다. 두 키워드 모두 몇 가지의 특이사항만 제외한다면 동일한 규칙이 적용됨을 알 수 있었습니다. decltype은 이전 두 키워드와는 조금 다른 방식의 연역이 적용됩니다. 이번 글에서는 decltype에 대하여 알아보도록 하겠습니다. decltype은 형식 지정자 키워드입니다. 기본적인 사용은 아래와 같습니다. const int i = 0; bool f(const int& p..