[C++] initializer_list
CPP2023. 8. 23. 15:07[C++] initializer_list

이번 글은 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}; 주의할 점은 생성자들 중에 ..

[C++] 가변 길이 템플릿과 후행 리턴 타입
CPP2023. 8. 20. 18:38[C++] 가변 길이 템플릿과 후행 리턴 타입

arr = [1, 3.14, 0x16] 위의 파이썬 코드는 아무 문제 없시 사용이 가능합니다 하지만 이를 C++에서 구현을 하려면 어떻게 해야할까요? 이를 C++에서 구현하기 위해서는 '가변 길이 템플릿', '후행 리턴 타입', 'common_type'에 대한 개념이 필요합니다 먼저 가변 길이 템플릿부터 알아보도록 하겠습니다. 가변 길이 템플릿 이란 의 두번째 템플릿 매개변수 typename뒤에오는 '...' 를 의미합니다. 이를 템플릿 파라미터 팩이라고 부릅니다. print(1, 3.14, 0x16) 파이썬에서 print함수는 처럼 막 바로 출력이 가능합니다. 이를 C++로 구현을 하면은 template void Print(T arg) { std::cout

[C++] boost 라이브러리 설치 방법
CPP2023. 8. 17. 16:36[C++] boost 라이브러리 설치 방법

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++] constexpr
CPP2023. 8. 17. 16:05[C++] constexpr

이번글은 C++11의 constexpr키워드에 대한 글입니다! constexpr과 상수 constexpr 키워드는 어떤 객체나 함수 앞에 붙일 수 있는 키워드로, 어떤 객체나 함수의 리턴 값을 컴파일 타임에 값을 알 수 있다 라는 의미를 전달합니다. 컴파일러가 컴파일 타임에 어떤 식(표현식)을 결정할 수 있다면 해당 식을 '상수식(constant expression)'이라고 합니다. 여기서 상수는 무엇일까요? 상수는 '변하지 않는 값'입니다. 그래서 선언과 동시에 정의(초기화)해야합니다. 이런 특징을 가지는 상수에는 두 종류가 있습니다. 바로 '컴파일 시간 상수(compile-time constant)', '런타임 상수(runtine constant)'입니다. 런타임 상수의 예부터 보면은 int a; s..

[C++] 헤더파일의 의미와 Build Process
CPP2023. 8. 10. 19:24[C++] 헤더파일의 의미와 Build Process

이번글은 저희같은? 사용자가 C++코드를 작성할 때 왜 헤더파일과 cpp파일로 나누어서 코드를 작성하는 지에 대한 글입니다. 저또한 그냥 아무런 이해없이 남들이 다 그렇게 쓰니까 아무생각없이 썻었는데 inline이나 템플릿을 공부하면서 부터 꼬이기 시작해서 다시 C++의 Build Process부터 공부한뒤 이해한 내용을 정리하였습니다. Build Process C++의 빌드 프로세스는 크게 아래 세가지 단계로 순자적으로 진행이 됩니다. - PreProcess - Compile - Link 우분투 환경에서 main.cpp, hello.cpp만들고 아래와 같이 코드를 작성해주도록 하겠습니다. 요로코롬 나누어서 컴파일 한뒤 실행하면 당연히 컴파일 자체가 안됩니다. 너무나도 당연하게 main.cpp에서 Hel..

[C++] stream buffer와 표준 입출력
CPP2023. 8. 2. 18:03[C++] stream buffer와 표준 입출력

저희가 아주 자주사용하기도 하고 사용하기 쉬운 라이브러리인 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을 입력하고 문자를 입력하려는 순간 프로그램이 종료..

[C++] 전달참조
CPP2023. 7. 31. 21:28[C++] 전달참조

template void fucn(T&& param) { ... } "param의 형식은 오른값이지만 param자체는 왼값이다" 위의 코드와 문장을 보고 무슨말이신지 이해가 안 가신다면 https://cjbworld.tistory.com/27를 보고 와주시면 감사하겠습니다. 전달 참조란? auto, template 같은 "형식 연역"에서 type deduction 발생시 자주사용하는 개념입니다. (형식 연역 : 아직은 정해지지 않았지만 컴파일 타임에 때려 맞추겠다) 오른값 참조와 비슷하게 생긴 요녀석은 &&를 같이 사용합니다. 위 코드애서 p1는 lvalue입니다. 컴파일러 경고에 따르면 rvalue참조에다가 lvalue를 넣을 수 없다고 하는군요. 왜냐하면 mp의 형식은 오른값 참조이기 때문에 오른값을..

[C++] 오른값 참조
CPP2023. 7. 30. 18:57[C++] 오른값 참조

이번글은 오른값 참조와 전달(보편)참조에 대한 글입니다. (전달 참조는 보편참조로도 불립니다) 오른값의 개념이 Mordern C++ C++11부터 생겼으며 해당개념의 등장으로 C++속도의 엄청난 치아를 가져다 주었습니다. 먼저 오른값이 무엇인지 알아보기 전에 "왼값"이 무엇인지 개념부터 살펴보도록 하겠습니다. 왼값(lvalue, l-value)은 단일식을 넘어서 계속 유지되는 개체이며, 오른값(rvalue, r-value)는 "전체 개체에서 - 왼값" 인 개체입니다. 즉 임시객체나, 상수 등이 포함됩니다. 기존의 참조는 '&'하나만 사용하고 오른값 참조의 경우 '&&'두개를 사용합니다. template void fucn(T&& param) { ... } "param의 형식은 오른값이지만 param자체는 ..

image