본문 바로가기

메모장/C++

(6)
[C++/etc] 키워드 사전 (수정중) C++ keyword volatile : compiler 최적화를 하지 않게하는 키워드 constexpr : 상수 표현식을 나타내는 키워드. - 변수나 함수, 생성자 함수에 대하여 컴파일 타임에 평가될 수 있도록 처리해준다. - constexpr 변수 또는 함수의 반환값은 반드시 LiteralType이어야 하며, LiteralType은 컴파일 타임에 해당 레이아웃이 결정될 수 있는 타입을 의미한다. - 변수에 constexpr 사용시 const한정자를 암시한다. 함수에 constexpr 사용시 inline을 암시한다. - MS문서 : https://learn.microsoft.com/en-us/cpp/cpp/constexpr-cpp?view=msvc-170 - 참고 : http://egloos.zum.c..
[C++] 스마트 포인터 메모 스마트 포인터란? 프로그램이 메모리 및 리소스 누수 없이 예외로부터 안전한지 확인하는 데 사용되는 포인터. 스마트 포인터(최신 C++) 자세한 정보: 스마트 포인터(최신 C++) learn.microsoft.com 메모리 누수가 일어나는 상황 + 스마트 포인터 적용 예제 : 개체 수명 및 리소스 관리(RAII) 리소스 누수 방지를 위해 최신 C++에서 RAII 원칙을 따릅니다. learn.microsoft.com 3가지의 스마트 포인터 unique_ptr 기본 포인터로 한 명의 소유자만 허용합니다. shared_ptr이 필요하다는 점을 확실히 알 경우 POCO의 기본 선택으로 사용합니다. 새 소유자로 이동할 수 있지만 복사하거나 공유할 수 없습니다. 사용하지 않는 auto_ptr을 대체합니다. boost..
[c++] async 테스트 #include #include #include #include void for_print(int num) { // std::this_thread::sleep_for(std::chrono::seconds(1)); for (int i = 0; i < 100; i++) fprintf(stderr, "%d번 Thread : %d\n", num, i); } int main() { for (size_t i = 0; i < 100; i++) std::async(std::launch::async, for_print, i); return 0; } 멀티쓰레드로 실행되지 않음. (하나씩 동기 실행됨) int main() { for (size_t i = 0; i < 100; i++) std::future f = std::a..
[C++] 구조체의 크기 (size of struct) 구조체의 크기는 구조체를 구성하는 요소들에 의해 정해 집니다. 하지만 크기를 출력해보면 예상한 값과 다르게 나올때가 있는데, 그 이유와 구조체의 구조에 대해 알아보겠습니다. struct Packet00{ charflags;// 1byte shortcount;// 2byte intmsg;// 4byte } sizeof(Packet00);// 8byte 위 구조체의 크기는 어떻게 정해졌을 까요? 구조체는 구조체가 포함하고 있는 요소들중 가장 큰 값을 기준으로 그 값의 배수만큼의 크기를 가집니다. Packet 구조체의 요소들의 크기를 더한 값은 7byte입니다. 하지만 요소들 중 크기가 가장 큰 int가 4byte의 크기를 가지기 때문에 총 크기는 그 배수인 8byte로 정해집니다. 또 다른 예를 들어보겠습니..
[C, C++] 표준 입출력 실험 (scanf) 입력 포맷 %[*][폭(width)][한정자(modifiers)]타입(type) ex) %d - 정수 입력 %*d - 정수 입력 1번 무시 %10s - 문자를 10개 까지만 입력받음 %10s%*s -문자를 10개 입력 받고 나머지 문자열은 버림 %[^\n] - \n이 나오기 전까지 문자열을 읽어 들인다. 이 경우 공백과 tab을 무시하지 않는다. 1. 문자 #include void manyChar() { char c1, c2, c3, c4, c5; scanf_s("%c", &c1); scanf_s("%c", &c2); scanf_s("%c", &c3); scanf_s("%c", &c4); scanf_s("%c", &c5); printf("%c%c%c%c%c", c1, c2, c3, c4, c5); } '..
C++/STL List를 순회하는 방법 std::list std::list intList; 기존 방법 (iterator 사용) for(std::list::iterator itr = intList.begin(); itr != intList.end(); itr++){ printf("%d",**itr); } 향상된 for문을 이용한 탐색 for (int *ptr : intList){ printf("%d",*ptr); } for each문을 이용한 탐색 for each(int* i in intList){ printf("%d",*i); } iterator를 쓰지 않는 편이 깔끔하다!