분류 전체보기(599)
-
참조자 전달 선호하기(effective c++ 20)
값에 의한 전달객체전달객체를 값으로 전달하면 생성자와 소멸자를 반복적으로 호출하여 매우 비효율적이다. 객체손실Derived Class의 객체를 Base Class의 객체로 인자를 전달하는 경우, Derived Class 객체의 특징이 잘려버리는 것. 상수객체에 대한 참조자(reference-to-const)로 전달하게 만드는 것이다. 무조건 참조자에 의한 전달이 좋은가?기본 제공 타입기본제공 타입에 대해서는 ‘값에 의한 전달’을 선택하더라도 엉터리가 아니고 더 효율 적일때가 많다. STL과 함수객체STL의 반복자와 함수 객체는 값으로 전달하는 것이 효율 적이다. (예전부터 반복자와 함수 객체는 값으로 전달이 효율적인 구조로 설계되어있다.) 반복자와 함수 객체 구현 원칙복사 효율을 높일 것.복사손실 문제에..
2015.07.28 -
디폴트들 사용금지령(effective c++ 06)
서론클래스에서 기본적으로 제공하는 기능들이 있다.(복사생성자, 대입연산자 등)자동으로 이러한 기능들이 실행되는 것을 막기 위해서는 private로 선언하면 되겠지만, 이는 friend키워드에 대해서는 여전히 무방비하다.자동제공 되는 기능에 대응되는 메소드를 private로 선언한 후구현하지 않은채로 두고, 해당 클래스를 상속받아 사용하는 방법이 있다. 예시 C++에서 class에 대해 기본적으로 제공하는 기능들은 사용자가 제한하지 않는다면 컴파일러가 임의로 작동하고만다. 이렇게 예외적인 상황없이 사용자가 의도대로 사용하려 하는 경우 해당 기능을 반드시 처리하여야 한다
2015.07.27 -
컴파일러의 디폴트 제공 함수들(effective c++ 05)
디폴트 제공클래스를 선언할 때 빈 클래스를 선언한다 하더라도 컴파일러는 기본적으로 복사 생성자(copy constructor), 복사 대입 연산자(copy assignment operator) 그리고 소멸자(destructor)를 public, inline으로 제공한다.* 만약 사용자가 디폴트로 제공하는 것을 선언했을 경우에는 생성자를 디폴트로 제공하지 않는다. 디폴트 생성 거부디폴트로 제공되어진 것들은 정말 기본적으로 제공되어지는 것이기 때문에 동작이 적법해야만 한다. 예를 들어 레퍼런스 변수와 같은 본래 가지고 있던 것 외에 바뀌면 안 되는 것들은 컴파일러가 디폴트 생성을 거부합니다. 위와 같이 레퍼런스 멤버가 있는 클래스는 디폴트 대입 연산자가 제공되지 않고 컴파일러는 컴파일을 거부하게 된다.
2015.07.27 -
const 들이대기(effective c++ 03)
const는 팔방미인의미적인 제약을 소스 코드 수준에서 붙일 수 있다.const 키워드가 붙은 객체는 외부 변경을 불가능하게 하고,컴파일러가 이 제약을 단단히 지켜준다. 주의점상수객체와 비상수객체는 함수의 오버로딩 대상에 포함된다.상수 멤버 함수의 반환값이 참조자라면, 상수형 참조자를 반환 할 수 있게 만들어야 한다. (기본제공 타입을 반환하는 함수의 반환값 수정은 공통적으로 불가능 하다는 규칙을 따르기 위함) 12345char *p = greeting; //비상수 포인터, 비상수 데이터const char *p = greeting; //비상수 포인터, 상수 데이터char const *p = greeting; //비상수 포인터, 상수 데이터 char * const p = greeting; //상수 포인터 ..
2015.07.27 -
#define 안녕(effective c++ 02)
#define 문제점#define은 C++언어 자체의 일부가 아닌 것으로 취급될 수 있다.사람들에겐 기호식 이름(Symbolic name)으로 보이지만 컴파일러에겐 보이지 않기 때문에 숫자 상수로 대체된 코드에서 컴파일 에러가 발생 시 혹은 디버깅 시에 문제가 생길 수 있다. 매크로 대신 상수를 사용한다!언어 차원에서 지원하는 타입이기 때문에 컴파일러 눈에도 보이며 기호 테이블에도 들어간다.최종 코드의 크기가 #define을 썼을 때보다 작게 나올 수 있다. ( 매크로는 목적 코드 안에 사본이 등장 횟수만큼 들어가지만, 상수는 사본이 한 개만 생긴다. ) 주의사항상수 포인터( constant pointer )를 정의 하는 경우상수 정의 는 대개 헤더 파일에 넣는 것이 상례이므로 포인터는 꼭 const로 ..
2015.07.27 -
C++은 연합체로 바라보자(effective c++ 01)
C++초기C언어에 객체 지향 기능 몇 가지가 결합된 형태C with Classes 라는 명칭으로 시작 발전아이디어, 기능, 프로그래밍 전략들을 취해 자기 것으로 만듦예외 : 함수 구성 방식의 헤게모니(주도권)을 크게 바꿈템플릿 : 프로그램 설계에 대한 새로운 사고방식을 선사STL : ‘확장성’에 대한 지평을 열었다. 특징다중 패러다임 프로그래밍 언어(Multi Paradigm Programming Language)라 불린다.절차적 프로그래밍(Procedural Programming)을 기본으로 하되,객체 지향(Object-Oriented), 함수식(functional), 일반화(Generic) 프로그래밍을 포함하며,메타 프로그래밍(Metaprogramming) 개념까지 지원한다. C++의 하위언어C- 블..
2015.07.27