2020 이전/C++ 19

C++의 까다롭고 유별난 친구들2

전문가를 위한 c++ 10강 공부한거 요약 c++11/ c++14 유니폼 초기화 유니폼 초기화를 사용하면 축소 변환이 일어날 경우 컴파일 에러를 발생시킨다. 유니폼 변환은 STL 컨테이너에도, 동적으로 할당되는 배열에도, 생성자 초기화 리스트에도 이용할 수 있다. 초기화 리스트 생성자 초기화 리스트와는 다르다! 다르다! 속성 사용자 정의 리터럴 C++ 리터럴 표준 1. 문자 'a'2. "character array" 3. float4. 0xab c++11은 리터럴 연산자를 통해 리터럴을 정의할 수 있게 한다.미가공 모드에서는 문자/문자열, 가공모드에서는 int같은 특정 타입의 값을 받는다. 헤더파일 그 다른이름은 순환참조 척결 1. 인클루드 가드 2. #pragma once #ifndef ~ #endif..

2020 이전/C++ 2019.03.22

C++의 까다롭고 유별난 친구들

전문가를 위한 C++ 10강 공부 요약 참조형: 참조는 다른 변수에 대한 alias(별명)참조형 변수는 항상 생성시점에 초기화해야한다.( 멤버 변수인경우 클래스 생성자 초기화 리스트에서 초기화 되어야한다. ) 참조와 포인터의 선택 기준. 1. 포인터와 달리 참조는 유효하지 않는 데이터를 가리키는 것이 거의 불가능한다.2. 역참조 연산을 할 일이 없으므로 포인터를 사용하면 접할 수 있는 역참조 오류를 볼 일이 없다.3. 참조형 파라미터로는 디폴트 값을 지정할 수 없다. 포인터는 파라미터에서 nullptr과 같은 디폴트값 지정 가능4. 해당 메모리를 누가 소유하고 있는가. 변수를 넘겨받는 측이 객체와 관련한 메모리를 해제해야한다면 포인터를 사용, 포인터를 사용해야하는 유일한 상황은 가리키는 대상을 바꾸어야 ..

2020 이전/C++ 2019.03.13

C++ 함수포인터 넘겨줄 때 명시적 형식이 없습니다

함수포인터 넘겨줄때 매개변수 인자에서 구조체 별칭을 타입으로 인식하지 못한다. 식별자가 정의 되어있지 않습니다. 원래 구조체의 형식네임을 따르면 제대로 인식이 된다. 클래스 경우? 별 문제가 없다. typdef의 문제도 아니고 구조체만 이런 문제가 있다. VS2015에서는 typdef한 이름을 그냥 써도 잘 되는거보면 나의 힘과 노력으로는 할 수 없어요~(VS2017쓰고있습니다)

2020 이전/C++ 2019.02.21

C++ std::function 콜백

개요 콜백: 현재 작업공간의 함수를 외부로 전달하여 외부에서 현재 작업공간의 함수를 호출하게 하는 법을 콜백이라고 부른다. 함수포인터와 콜백: 전역함수는 code영역에 저장된다. 이때 전역함수의 이름은 주소가 되기때문에 함수 포인터로 해당 함수의 이름을 넘겨주는 것으로 함수포인터에 등록이되고 함수포인터를 통해 호출이 가능한다. 즉 함수를 인자로 쓸 수 있다. 하지만 일반 함수포인터로는 클래스의 멤버함수를 등록할 수 없다(용법이 다르다). 하지만 std::function을 이용하면 클래스의 멤버함수를 콜백할 수 있다. 멤버함수포인터로 콜백 호출하는 예 일반함수포인터와는 다르게 멤버함수포인터를 외부에서 선언, 사용할때는 클래스 소속을 명시해야한다. 그리고 실제로 호출할 때는 클래스의 인스턴스를 통해서 호출해..

2020 이전/C++ 2019.02.06

C++ auto

unordered_map mMap;unordered_map::iterator iter = mMap.begin(); unordered_map::iterator iterEnd = mMap.end(); unordered_map mMap;auto iter = mMap.begin(); auto iterEnd = mMap.end(); 와 너무너무 편해요~~ MSDN : https://docs.microsoft.com/ko-kr/cpp/cpp/auto-cpp?view=vs-2017 Q: https://stackoverflow.com/questions/19618759/c-11-auto-compile-time-or-runtime auto의 타입 결정은 compile time 때 이루어진다. 런타임 때에는 성능에 영향을 ..

2020 이전/C++ 2018.11.28

이펙티브 C++ Chapter 5 구현

요약 26. 변수를 너무 앞서서 정의하면 수행성능이 갑자기 떨어진다. 쓰지도 않을 클래스를 불렀을 때, 27. 캐스팅 남용하면 느리고, 손보기도 힘들다. 미묘한 버그에 치명타가 발생할 수 있다.28. 객체 내부 private 멤버의 참조자를 반환하는 public 함수는 캡슐화가 깨고 유효하지 않는 핸들(dangling handle)이 남용할 수 있게 한다.29. 예외발생시 적합한 처리를 하지 않으면, 자원이 누출되고 자료구조가 망가진다.30. 인라인 남용은 비대한 코드를 불러온다.31. 코드의 결합도가 높으면 빌드시간이 길어진다. 26. 변수정의는 늦출 수 있는 곳까지 늦춘다.생성자/소멸자를 호출하는 type(class)로 변수를 정의할때 문제점은 (1) 프로그램 제어 흐름이 변수 정의에 닿을때의 생성자..

2020 이전/C++ 2018.11.12

이펙티브 C++ 챕터 4 설계 및 선언

캡슐화: 외부에서 볼 수 없다는 것. 캡슐화 할때 밖에서 볼 수 있는 것이 줄어들고, 그것들을 바꿀때 필요한 유연성이 커짐. 캡슐화된 데이터 멤버를 참조하는 인터페이스는 그대로 가져가면서 데이터 멤버한 수정하면 되니까! 또는 코드를 바꿔도 제한된 사용자(해당 데이터/함수)들 외에는 영향을 주지않는 융통성. C++ 인터페이스 설계 제대로 쓰기에는 쉽게 엉터리로 쓰기에는 어렵게. 18. 인터페이스 설계는 제대로 쓰기에는 쉽게, 엉터리로 쓰기에는 어렵게 함수, 템플릿, 클래스도 인터페이스다. 사용자가 저지를 수 있는 실수를 항상 생각해야한다. 19. 클래스 설계는 type 설계와 똑같이 취급하라. 1) 타입의 객체 생성 및 소멸은 어떻게 이루어질 것인가? 2) 객체의 초기화와 객체의 대입은 어떻게 달라야 하는..

2020 이전/C++ 2018.10.31

이펙티브 C++ 챕터3 자원관리 (1회차)

boost 스마트 포인터 : https://blog.naver.com/sorkelf/40132656978 auto_ptr : https://wikidocs.net/684 스마트 포인터 : https://msdn.microsoft.com/ko-kr/library/hh279674.aspx c++ 진화 : https://msdn.microsoft.com/ko-kr/library/hh279654.aspx 자원관리 원칙: 메모리를 가져와서 썼으면 반드시 해제 해야한다. C++가 지원하는 생성자, 소멸자, 객체복사 함수 등을 이용한다. 13. 자원관리에는 객체가 그만 - 자원을 객체에 넣고 그 메모리 해제를 소멸자가 맡도록 한다. - auto_ptr : 스마트 포인터(가리키는 대상에 대해 소멸자가 자동으로 dele..

2020 이전/C++ 2018.10.29