항목 47 : 쓰기 전용(write-only) 코드는 만들지 말자
std::vector<int> v;
int x, y;
...
v.erase(
std::remove_if(std::find_if(v.rbegin(), v.rend(),
std::bind2nd(std::greater_equal<int>(), y)).base(),
v.end(),
std::bind2nd(std::less<int>(), x)),
v.end());
보기만 해도 현기증이 나는 코드이다.
x보다 작은 값을 모두 지우지만, y보다 크거나 같은 값 중 가장 마지막 것의 앞에 있는 것들은 모두 그대로 두는 코드이다.
협업을 한다면 절대적으로 지양해야 하는 코드이다. (작성자가)쓰기에는 쉽지만 (다른 사람들이)읽고 이해하는데에 있어서 너무 짜증이 나는 코드인 것이다.
물론 상황에 따라 다르긴 하겠지만 유지보수 측면에서 봤을때는 쓰기 전용 코드를 절대적으로 지양해야 한다.
항목 48 : 용도에 맞는 헤더를 항상 #include하자
예를 들어 <string>은 <iostream> 헤더만 포함 시켜도 사용할 수 있다. (VS2022 C++14 기준)
string을 사용하게 된다면 확실하게 <string> 헤더를 포함시켜 주어야 한다. 이식성의 문제이다.
헤더 안에 선언된 것을 사용할 때는 목적에 맞는 헤더를 포함시켜 주어야 한다.
항목 49 : STL에 관련된 컴파일러 진단 메시지를 해석하는 능력을 가지자
◾ vector와 string의 경우 반복자는 포인터와 똑같다. 그래서 반복자를 가지고 실수를 했다면 컴파일러 오류 메시지는 포인터 타입을 언급할 확률이 100%에 근접한다.
◾ 삽입 반복자에 오류 대한 메시지는 삽입 반복자를 호출할 때 오류가 발생했다는 뜻이다.
◾ 출력 반복자, 삽입 반복자는 대입 연산자의 내부에서 동작이 이뤄지기 때문에 오류 발생시 대입 연산자를 언급하게 된다.
◾ 알고리즘의 내부가 잘못 되었다는 오류가 발생되었다면 함께 사용한 타입에 문제가 있는것이다.
덧붙여서 할당자를 받는 생성자는 웬만하면 쓰지 말자.
const 멤버 함수 안에서는 모든 비정적 데이터 멤버는 무조건 상수 멤버가 된다.
항목 50 : STL 관련 웹 사이트와 친구하자
(참고 : 너무 오래된 정보라서 넘어간다)
'도서 > Effective STL' 카테고리의 다른 글
STL 프로그래밍을 더 재미있게 해주는 팁 모음 (1) (0) | 2022.12.22 |
---|---|
함수자, 함수 객체, 함수, 기타 등등 (2) (0) | 2022.12.21 |
함수자, 함수 객체, 함수, 기타 등등 (1) (0) | 2022.12.20 |
알고리즘(Algorithms) (2) (0) | 2022.12.20 |
알고리즘(Algorithms) (1) (0) | 2022.12.20 |