
" 함수 뒤 const " class Test { public: void ResizeVector(int num) const { vec.resize(num); } private: vector vec;} 위에 있는 함수는 컴파일이 될까? 정답은 안된다. 이유는 함수 뒤 const 때문에 vector 내장함수인 resize를 사용할 수 없다.함수 const에 대해서 간단하게 알아보자. [ 의미 ] - 해당 함수에서는 해당 객체의 멤버변수를 변경할 수 없다. - 여기서 이번에 새로 알게 된 사실은 멤버변수에 순차 컨테이너 vector가 있었는데 vector 내장 함수도 제한 받는다는 것이다.어찌보면 당연한거지만 ...? 컴파일 전에 오류메시지를 뱉는게 신기했다...
![[windbg] windbg 사용하기, 덤프 분석하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJjbvp%2FbtsId8AlwfT%2FZ7bjY2AASbK42kScmE6Hok%2Fimg.png)
"[windbg] windbg 사용하기, 덤프 분석하기" 1. 덤프를 읽을 심볼과 심볼에 맞는 소스코드 경로를 연결시킨다. 2. 덤프를 windbg에 드래그 드롭 또는 open으로 파일을 열면 이런 화면을 볼수 있다.Loading Dump File : 덤프 파일의 위치, 덤프 종류 Executable search path is : 덤프가 발생한 OS Debug sesstion time : 덤프 발생 시점 시간 Process Uptime: 부팅 이후 동작한 시간 3. !analyze -v 명령어 실행 !analyze-v 명령어를 실행하면 더욱 자세하게 덤프 내용이 나온다.FAULTING_IP: 어떤 부분에서 문제가 일어났는지 표시한다. callstack의 마지막 부분이다. KERNRLBASE.ddl..
"[ assembly 명령어 ] mov, lea" mov ( move ) - 데이터를 복사하는 명령어 (*이동이 아님 주의) [예시]1. mov eax, dword ptr [ a ] : a의 주소가 가리키는 4바이트(Dword) 값이 eax에 저장한다. 2. mov eax, [adr] : adr주소가 가리키는 값을 eax에 저장한다.3. mov dword ptr [ a ], 3 : a에 3 값을 저장한다.4. mov eax, [ rbx + 8 ] : rbx주소값에 + 8을 한 주소로 가서 그 안에 있는 값을 eax에 복사한다. 5. mov [rcx], rax : rcx레지스터가 참조하는 주소의 메모리에 rax 레지스터의 값을 저장한다. Lea ( Load Effective Address )- 유효..

"c++20 STL::Container #2" 1. contains기존 map, set 데이터 find함수 사용 시 반복자와 end반복자가 같지 않은 지 비교하는 방식이였다. std::set s {1, 2, 3, 4, 5}; auto findset = s.find(2);if (findset != s.end()){ cout m {{1, 1000}, { 2, 2000 }}; auto findmap = m.find(2); if(findmap != m.end()){ cout second c++20에서 새로 추가 된 contains는 associate container의 내장함수로 찾으려는 키값을 넣으면 true, false로 그 key의 존재 여부를 알 수 있다. if (findset.contains(2)..

"c++20 STL::Container #1" 1. std::to_array std::array 만드는 방법이 추가되었다. //암시적 타입 추론 auto ToArray = std::to_array("Hello World");//명시적 타입 추론auto ToArray = std::to_array({ 1,2,3,4,5,6 }); 2. std::erase, erase_if 기존에 vector 데이터 중 특정한 조건에 부합하는 데이터를 삭제하려고 할 때 여러가지 방법과 문제점을 알아보자.// 1번 ====================================================================vector vec {-1, 2, 3, 4, -5, 7, -2, 3 }; for (auto i..

"(c++20) Conditional Explicit Constructor" 1. explicit // c++11 struct NoExplicit{ NoExplicit() = default; NoExplicit(int n) { cout TestNoExplicit(10); // - ???? error X TestNoExplicit() NoExplicit struct 자료형을 매개변수로 받고 있다. 그럼 매개변수에 NoExplicit struct 이 외에 다른 자료형이 들어간다면 에러를 뱉어내는게 정상이다. 하지만 위 코드에서 TestNoExplicit(10) 에러를 뱉어 낼거 같지만 정상 작동한다. 이는 컴파일러에서 "10"을 NoExplicit(int n)" 생성자를 이용하여 암시적 형변환을 ..
![(c++20) [Three-way Comparsion(3방향 비교 연산자)/우주선] 연산자](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlbkUC%2FbtsIdzlGy41%2FZoYcnXXQuigohei3aLGWI1%2Fimg.png)
"(c++20) Three-way Comparsion(3방향 비교 연산자)/우주선" c++20에 추가된 것 중에 아주 편안한 연산자 오버로딩이 생겼다. !! 지금은 아니더라도(?) 아주 유용하게 쓰일 거 같은 녀석이라서 정리해본다. class나 struct를 만들어서 그 객체끼리 비교를 하기 위해서는 필요에 따라 [ '' '>=' '==' '!=' : 6개] 연산자 오버로딩을 해야한다. 하지만 여기서 c++20에 추가된 Three-way Comparsion 연산자를 사용하면 6개를 포함한 operator하나만 정의하면 된다. #include using namespace std;struct Myoperator{ Myoperator(int value) : _value(value) { } //auto ope..

"(c++20) consteval, constinit" C++20에 추가된 Language 중 consteval, constinit에 대해서 알아보고 기존에 있었던 const와 constexpr과 비교해보려고한다. 일단 어떤 단어의 줄임말인지 확인하고 넘어가자 ~const: Constant 상수constexpr: Constant Expression 표현// c++11consteval: Constant Evaluation 검증 // c++20 constinit: Constrant Initialization 초기화 // c++20함수에 키워트를 붙였을 때, 변수에 키워드를 붙였을 때를 나눠서 정리해보았다. 1. 함수 (일반 vs constexpr vs consteval) 먼저 선행해야 할 개념은 런타임(..
![[c++17] 전문자를 위한 c++17 새로운 내용 북마크](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH3lZX%2FbtsFGqxSJAh%2FmKEe7KW0X9rn98ZGVXISNK%2Fimg.png)
c++17에 추가된 문법을 도서 "전문가를 위한 C++17(개정4판)"에서 빠르게 찾기 위해서 정리해보았다. page 58중첩된 네임스페이스 (nested namespace)61std::byte69if문의 이니셜라이저(intializer : 초기자)72switch문의 이니셜라이저(intializer : 초기자)81구조적 바인딩(structured binding)138로우 레벨 숫자 변환 "}">#include 140std::string_view클래스298weak_ptr도 shared_ptr와 마찬가지로 C스타일 배열을 지원한다.299weak_from_this()390static 데이터 멤버를 inline으로 선언할 수 있다.530std::as_const() 헬퍼 메서드 "}">#include (obj)..
![[HTTP] Error 416 "The requested range is not satisfiable"](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcL6ar6%2FbtsEqV67fqm%2FYBqgcU29qF5ZI1VJ366VzK%2Fimg.png)
HTTP Error 416 "The requested range is not satisfiable" ???????????????????? 범위를 잘못 입력했거나 끝 범위를 입력한 경우. 🔸 발생하게 된 상황: 작업을 하던 중... 파일을 받다가 중간에 멈췄을 경우(강종 등등 예상하지 못한 종료) 다음에 다시 파일을 이어받고 싶어서 코드를 작성하다. 발생한 에러였다. HTTP에 특정 범위(byte)부터 파일을 받겠다고 요청을 보냈었다. HTTP에 연결은 되지만 전달 받은 내용에는 위와 같은 텍스트가 포함된 buffer를 받았다. 요청문법이 잘못되면 "Error 400 : Bad Request - Invalid Header" 을 뱉어낸다. 즉 문법에는 문제가 없었다. ("HTTP 범위 요청" 키워드로 구글링..