이번글은 C++의 스마트 포인터에 대한 글입니다. 스마트 포인터 C++이후에 나온 언어들을 보면은 C#, JAVA 등등은 '가비지 컬렉터'라고 불리는 '자원 청소기'가 내장되어 있습니다. 프로그램 상에서 더이상 사용하지 않는 자원들을 자동으로 해제 해주기 때문에 사용자가 굳이 메모리 해제를 일일히 신경쓰면서 작업할 필요가 없습니다. 하지만 우리의 C++의 경우 이딴건 지원을 하지 않습니다! (이게 매력인거 같습니다) 그래서 스마트 포인터를 사용하는데 스마트 포인터를 사용하는 가장 큰 이유는 'RAII'때문입니다. Resource Acquisition Is Intialization이라는 말인데요 '오브젝트와 자원 획득과의 초기화를 같이한다(생명주기를 같이한다)'라는 말입니다. (따라서 모든 스마트 포인터는..
이번글은 union 키워드에 대한 간단한 글입니다! union union이란? A union is a special class type that can hold only one of its non-static data members at a time. 라고 합니다! 해석하면 한번에 하나의 non-static 데이터 멤버를 가질 수 있다고 합니다. 약간 카멜레온을 생각해주시면 될거같습니다. 어쩔때는 A였다가 어쩔때는 B였다가 하는 식으로요(저는 이렇게 이해했습니다) 아니면 키워드 그대로 '연합체'느낌으로 받아 드리셔도 될거같습니다. 우리는 하나의 연합체다ㅎㅎ 그래서 메모리도 공유한다. 또한 union은 다른 데이터 멤버중에 가장큰 크기를 가지는 데이터 타입의 크기를 할당받습니다. 바로 예시코드를 보면서 이..
이번 글은 std::intializer_list 생성자에 대한 글입니다! C++11부터 지원된 문법이며 '경량 프록시 오브젝트(lightweight proxy objet)'라고 합니다. '프록시'에 대한 부분은 https://d-yong.tistory.com/49 해당 블로그를 참고해주세요! 간단하게 말하면 뭔가 '대리인 객체'? 대신 생성해주는 느낌으로 이해하시면 될꺼같습니다. 왜냐하면 std::initalizer_list가 실제 리스트 요소를 포함 하지는 않고, 리스트의 요소에 대한 포인터를 포함하고 있기 때문입니다. 문법은 아래처럼 '중괄호'를 통해 빠르고 간편하게 std::vector를 초기화 할 수 있게 되었습니다. std::vector vec = {1, 2, 3}; 주의할 점은 생성자들 중에 ..
arr = [1, 3.14, 0x16] 위의 파이썬 코드는 아무 문제 없시 사용이 가능합니다 하지만 이를 C++에서 구현을 하려면 어떻게 해야할까요? 이를 C++에서 구현하기 위해서는 '가변 길이 템플릿', '후행 리턴 타입', 'common_type'에 대한 개념이 필요합니다 먼저 가변 길이 템플릿부터 알아보도록 하겠습니다. 가변 길이 템플릿 이란 의 두번째 템플릿 매개변수 typename뒤에오는 '...' 를 의미합니다. 이를 템플릿 파라미터 팩이라고 부릅니다. print(1, 3.14, 0x16) 파이썬에서 print함수는 처럼 막 바로 출력이 가능합니다. 이를 C++로 구현을 하면은 template void Print(T arg) { std::cout
https://www.boost.org/ Boost C++ Libraries Welcome to Boost.org! Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work well with the C++ Standard Library. Boost libraries are intended to be widely useful, and usable across a broad spectrum of applications www.boost.org 위의 링크에 접속하여 Download에 들어가 줍니다. 요기서 자신의 OS에 맞는 파일을 다운로드 해주시면 됩니다. 저는 다운한다음에 D드라이브의 Bo..
이번글은 C++11의 constexpr키워드에 대한 글입니다! constexpr과 상수 constexpr 키워드는 어떤 객체나 함수 앞에 붙일 수 있는 키워드로, 어떤 객체나 함수의 리턴 값을 컴파일 타임에 값을 알 수 있다 라는 의미를 전달합니다. 컴파일러가 컴파일 타임에 어떤 식(표현식)을 결정할 수 있다면 해당 식을 '상수식(constant expression)'이라고 합니다. 여기서 상수는 무엇일까요? 상수는 '변하지 않는 값'입니다. 그래서 선언과 동시에 정의(초기화)해야합니다. 이런 특징을 가지는 상수에는 두 종류가 있습니다. 바로 '컴파일 시간 상수(compile-time constant)', '런타임 상수(runtine constant)'입니다. 런타임 상수의 예부터 보면은 int a; s..
이번글은 저희같은? 사용자가 C++코드를 작성할 때 왜 헤더파일과 cpp파일로 나누어서 코드를 작성하는 지에 대한 글입니다. 저또한 그냥 아무런 이해없이 남들이 다 그렇게 쓰니까 아무생각없이 썻었는데 inline이나 템플릿을 공부하면서 부터 꼬이기 시작해서 다시 C++의 Build Process부터 공부한뒤 이해한 내용을 정리하였습니다. Build Process C++의 빌드 프로세스는 크게 아래 세가지 단계로 순자적으로 진행이 됩니다. - PreProcess - Compile - Link 우분투 환경에서 main.cpp, hello.cpp만들고 아래와 같이 코드를 작성해주도록 하겠습니다. 요로코롬 나누어서 컴파일 한뒤 실행하면 당연히 컴파일 자체가 안됩니다. 너무나도 당연하게 main.cpp에서 Hel..
저희가 아주 자주사용하기도 하고 사용하기 쉬운 라이브러리인 ios_base 라이브러리에 대해서 알아보도록 하겠습니다. #include #include using namespace std; int main() { string s; char c; std::cout > s; std::cout > c; return 0; } 위와 같은 코드가 있을 때 위와 같이 입력하면 입력을 받지 않고 바로 끝내버립니다. 마찬가지로 int main() { int n; char c; printf("정수입력 : "); scanf_s("%d", &n); printf("문자 입력 : "); scanf_s("%c", &c); return 0; } 위의 소스코드를 빌드한다음에 실행하고 1을 입력하고 문자를 입력하려는 순간 프로그램이 종료..