C++
-
[Effective Modern C++] 식별자 : overrideC++/Effective Modern C++ 2022. 4. 22. 17:38
override 식별자는 C++11에서 추가된 식별자입니다. 이 식별자는 const, virtual등의 기능적인 역할을 하는 것이 아닌, 알리는 (Notify)역할을 하는 식별자 입니다. 특이한 점은, 기존에 기능, 가독성을 위해 사용한 기법들 (delete, static_cast 등)과는 다르게, 알리는 대상이 컴파일러 라는 것 입니다. 이번 글에서는 override의 사용에 대해 살펴보도록 하겠습니다. 1. 가상 함수 & 비 가상 함수 더보기 예제를 살펴보도록 하겠습니다. #include using namespace std; class Anc { public: void func1() { std::cout
-
[Effective Modern C++] private와 deleteC++/Effective Modern C++ 2022. 4. 22. 17:37
함수를 하나 정의해보겠습니다. 이 함수는 정수를 하나 받아서 당첨 번호인지 반환해주는 함수입니다. bool is_chosen(int number) { ... } 이 함수는 본래의 의도와는 다른 방향으로 사용될 여지가 존재합니다. if (is_chosen('a')) { ... } if (is_chosen(true)) { ... } if (is_chosen(3.5)) { ... } 위와 같은 함수 호출은 인자들이 묵시적으로 int로 변환되어 전달됩니다. 이런 상황을 방지하기 위해, 개발자는 특정 형식들에 대한 함수의 오버로딩을 삭제할 수 있습니다. 이번 글에서는 함수의 삭제에 대해 살펴보겠습니다. 1. 함수 삭제하기 더보기 서론에 언급한, is_chosen(int)함수가 다른 형식으로 호출되는 것을 막기 위..
-
[Effective Modern C++] enum과 enum 클래스C++/Effective Modern C++ 2022. 4. 18. 13:37
C++98스타일의 enum은 C++의 기본 스코프 규칙이 적용되지 않습니다. enum Color { black, white, red }; auto white = 0; C2365 : 'white': 재정의: 이전 정의는 '열거자'입니다. enum의 열거자들은 enum을 포함하는 범위에 속하여, 위와 같이 자신들의 이름이 범위 밖으로 나가는 것을 볼 수 있습니다. C++에서는 새로이 enum class가 추가되었는데, 이번 글에서는 그에 대해 다루어 보도록 하겠습니다. 1. Scoped enum 더보기 범위 있는 enum (Scopred enum)은 enum class를 부르는 말 입니다. 예제를 살펴보도록 하겠습니다. enum class Color { black, white, red }; auto whit..
-
[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 위 코드의 각 함수, 클래스는 다음과 같습..