우선 잠재적 모호성이란? #include class A { public: A(const B&); }; class B { public: operator A() const; }; int main() { void f(const A&); B b; f(b); // B클래스의 operator A() 가 호출될까? // A클래스의 생성자 A() 가 호출될까? } 이런 경우를 잠재적 모호성이라 한다. 이유. 1. 컴파일 타임 중 예상치도 않은 오류가 날수 있다. 2. 라이브러리 파일의 이식성이 엄청나게 떨어진다. 해결방법 1. 네임스페이스를 사용한다.( 이 방법은 가독성을 떨어 뜨릴수 있다...) 2. 항상 디버깅이 가능한 코딩 습관을 길러야 한다; 3. 설계를 잘 하는 방법밖에 없다. 개인적인 생각 1. 이 이야기에..
전체 글 검색 결과
우선 수치형 타입 이란? 기본자료형인 char long int float double 을 말한다. 포인터형 타입이란? char* long * .. 등등 이유 1. 오버로딩 시 그 모호성이 생길 가능성이 충분하다. (여기서 모호성은 ... VC2005 표기된 말을 그대로 인용한것으로 개인적 생각에 써 두겠다) 2. NULL 포인터와 수치형 타입의 0에 대해서 .. 매우 불확실하다. (사람의 눈으로.. 사실 0은 int형 으로 파악되고 FLASE 로 파악된다. 그것이 NULL 포인터라 할지라도) 해결 방법 1. 0이런 무엇인가? 란 답을 가지고 있어야 한다. 2. 수치오버로딩 시 오버로딩이 되는 매개변수의 변화에 대해서 생각해 두어야 한다. 3. 포인터형일 때는 다음과 같은 임시객체를 만들어 사용 해라. c..
우선 함수 오버로딩이란? 1. 똑같은 함수이름이 두개 있다. 2. 1번의 상황에서 두 함수의 매개변수가 다르다. 3. 각각 작동이 된다. 이때 이 함수를 함수 오버로딩되었다. 라고 말한다. 디폴트 인자 값이란? 1. 매개변수에 operator = 과 목적데이터를 넣는다. 예) int f(int a = 1); 이때 1은 디폴트 인자값이다. 항목 24. 함수 오버로딩과 디폴트 인자값 중에서 주의깊게 선택한다. 이유 1. C++ 특유의 함수 오버로딩과 디폴트매개변수 사이에 모호성이 발생될 수 잇다. - 이 모호성 때문에 컴파일 타임에 에러가 발생한다. (컴파일러 찾아주는 오류는 너무 반갑고 기분좋다.) 2. 가독성이 떨어 진다.... 해결방법 1. 자신에게 자문해 본다. - 디폴트로 이용할 값이 있는가? - ..
항목 23. 객체 반환시 레퍼런스를 반환하지 않는다. 이유 1. 존재하지 않는 객체를 레퍼런스로 반환 되어, 런타임 중 오류가 일어 날수 있다. - 함수에서 생성한 객체를 반환하는 경우 주의점 1. 레퍼런스를 반환할지 객체를 복사하여 리턴할지는 고민된다면, 올바르게 동작하는것으로 리턴 해라. 2. 컴파일러 제공 회사가 가능한 비용이 적게 드는 방법을 발견하도록 맡겨 둘것 코드 최적화(RVO)를 컴파일러가 알아서 해주는 부분을 말하는것 같다 개인적인 생각 1. .. int 형 이하의 객체는 모두 값에 의한 전달을 하는게 속편하다. 2. 여전히 해결방법 1번을 잘 생각해 봐야 할것이다.
항목 22. 값에 의한 호출보다는 레퍼런스에 의한 호출을 선호한다. 이유 2008/06/06 23:27 수정 1. 효율성이 매우 떨어 진다. 2. 상속 받은 객체가 부모객체 메소드에 들어갈 경우, 값이 짤려버린다. 1. 파생 클래스의 객체를 값에 의한 복사를 이루어질 경우, 그 비용을 많이 지불하기 때문이다. 2. 또한 객체 복사는 슬라이싱 문제(slicing problem)가 파생 객체의 복사체에 일어 날수 있기 때문이다. 해결 방법 1. 레퍼런스로 전달 한다. 주의 사항 - 2008/06/06 23:27 수정 1. 레퍼런스를 사용할때는 모호성이 없는것을 보장해야만 한다. 2. int형 이하의 데이터이고, 복사본만 쓰면 되는 경우 call by value가 더 빠르고 더 효율적이다. 1. 레퍼런스를 사..
항목 21. 가능한 const를 이용한다. 이유 1. 여러 상황속에서 내가 정의한 데이터가 아무렇게나 변경 될수 있다. - 포인터, 레퍼런스로써 가리킨 데이터가 private인경우에도 변경되는 경우와 마찬가지다. 2. operator 의 반환값이 const 가 아닐경우 a * b = c 와 같은 경우 무슨일은 한거같은 느낌만 들기 때문이다.(실험해 보면 재미잇다) 해결 방법 1. const 키워드를 넣을수 있는 곳에는 주저말고 넣자. 2. 포인터로 값을 전달하게 될때는 이중 const로 묶어 놓자. 참조 사항 1. 내부 함수가 레퍼런스로 값을 반환해줄경우 private에 있는것도 접근이 가능해진다. 2. 1번의 사항은 포인터도 마찬가지다. 그러므로 이럴때 const를 사용 하면 좋다. 더 좋은것은 설계를..
최근댓글