C++ magister 7

C/C++ 개념: 전방 선언(forward declaration)

전방 선언(forward declaration) 1. 설명 함수나, 구조체, 열거자, 공용자, 외부(extern) 변수 (C++ 에서는 클래스도) 등을 그 실제 구현(implementation) 시점보다 앞서서 선언(declare)만 하는 것을 말합니다. 물론, 구현부와 선언부의 서명(signature)은 일치해야 합니다. 서로를 호출하는 함수, 외부(extern) 변수, PImple 기법 등에서 사용됩니다. 헤더와 소스 파일로 구현부, 선언부를 분리하는 행위는 기본적으로 모두 전방 선언에 속합니다. ※ main 함수보다 아래에서 구현된 함수를 호출할 때도 main 위에서 해당 함수를 전방 선언해야 합니다. 하지만 이런 케이스는 그냥 해당 함수를 main 위로 옮기면 되는 거라(원래는 다른 헤더 파일로 ..

C/C++ 개념: 완전한 타입(Complete Type), 불완전한 타입(Incomplete Type)

완전한 타입(Complete Type), 불완전한 타입(Incomplete Type) 1. 설명 완전한 타입이란, 해당 컴파일 시점에서 그 타입(구조체(struct), 열거자(enum), 공용체(union), 클래스(class))의 구현(Implement) 정보를 모두 알고 있는 타입을 말합니다. 위 4가지를 제외한 모든 타입은 무조건 완전한 타입입니다. 불완전한 타입이란, 해당 컴파일 시점에서 그 타입의 구현 정보를 알지 못하고, 선언된 정보만 알고 있는 상태를 말합니다. ※ 타입의 어떠한 정보도 알지 못하는건 그냥 알수 없는 타입(unknown type)이나 알수 없는 식별자(unknown identifier) 입니다. 보통 실수로 헤더를 넣지 않거나 했을 때 생깁니다. 2. 예시 #include s..

C 강좌 0강 - C 언어란?

0. 서론 C++ 강좌를 작성 하고 있었는데.. 하다 보니까 이게 도저히 C 강좌를 먼저 쓰지 않으면 진행이 안 되겠더군요. 기본적인 자료구조나 함수, 포인터들은 C 에서 그대로 물려받다 보니, 해당 부분들을 따로 부연설명 하려니 그것도 너무 사이즈가 켜져서.. 어차피 그런 부분들을 알면 C언어도 초급은 떼는 거나 마찬가지이니 그냥 C 강좌를 먼저 작성하는게 좋겠다고 생각이 드네요 프로그래밍을 처음 접하시거나, 다른 언어들을 접하시고 온 분들도 잘 이해할 수 있게 작성하는걸 목표로 잡았습니다. 본 강의에서는 C 언어의 기능이지만, 쓸일도 거의 없고 괜히 머리만 복잡해 지는 - 다차원 배열 포인터나 구조체의 비트필드 및 메모리 정렬 등 - 은 링크로 빼 놓았으니, 링크는 굳이 들어가 보시지 않으셔도 됩니다..

C++ 템플릿(Template): SFINAE

C++ Template: SFINAE Substitution Failure Is Not An Error SFINAE는 C++ 템플릿 프로그래밍에서 자주 쓰이는 기법입니다. 컴파일러가 알맞은 함수를 추론(deduce) 하는 원리를 이용해, 받는 타입을 제한하거나 타입에 따라 행동을 다르게 할 때 주로 사용하게 됩니다. SFINAE is a technique that is often used in C++ Template Programming. It restrains function parameter types by using the mechanism of how the compiler deduces appropriate overloaded functions and calling the appropriate ..

C++ STL: std::rbegin, std::rend, std::crbegin, std::crend

std::rbegin, std::rend std::crbegin, std::crend 요약 기본 배열 타입은 자동으로 알맞은 reverse_iterator를 만들어 되돌려 줍니다. 그 외에는 인자로 받은 객체의 동일한 이름의 메서드를 호출합니다. 즉, 알맞은 메서드가 정의되어 있다면 사용자 정의 클래스도 인자로 넘겨 줄 수 있습니다. 설명 std::rbegin 은 마지막 원소 주소를, std::rend 는 처음 원소의1칸 이전 주소를 가리키는 reverse_iterator를 만들어 반환합니다. std::crbegin, std::crend 는 각각 std::rbegin, std::rend 와 동일한 곳을 가리키는 const reverse_iterator를 반환합니다. std::end 가 실제 마지막 원소보..

C++ 레퍼런스: std::begin, std::end, std::cbegin, std::cend

C++ 레퍼런스 std::begin, std::end std::cbegin, std::cend 요약 기본 배열 타입은 자동으로 알맞은 iterator를 만들어 되돌려 줍니다. 그 외에는 인자로 받은 객체의 동일한 이름의 메서드를 호출합니다. 즉, 알맞은 메서드가 정의되어 있다면 사용자 정의 클래스도 인자로 넘겨 줄 수 있습니다. 설명 std::begin 은 처음 원소의 주소를, std::end 는 마지막 원소의 다음 주소를 가리키는 iterator를 만들어 반환합니다. std::cbegin, std::cend 는 각각 std::begin 과 std::end 의 동일한 주소를 가리키는 const_iterator를 반환합니다. std::begin 이상, std::end 미만 범위 이외의 값을 읽거나 쓰는건 ..