※ 요약

필자가 자주 이용하는 cpp 레퍼런스 사이트를 소개하고자 한다. 이 사이트는 필자가 C++11을 공부하기 위해 찾다가 알게된 사이트인데 정리가 잘 되어 있고 설명 또한 잘 되어 있어 자주 찾는 사이트중 하나다. C++11 이후에 추가/확장된 최신 C++14, C++17에 대해서도 정보를 제공하며 C 레퍼런스도 있으므로 유용하게 이용할 수 있다.


※ 사이트 주소


※ 설명

아래는 사이트에 접속한 화면이다. 필자가 자주 찾는 컨테이너들부터 string, 유틸리티, 알고리즘, 정규식, 이터레이터, C++17에 추가된 Filesystem까지 엄청나게 다양한 것들의 레퍼런스 정보를 제공한다.



아래는 컨테이너 개요 중 일부 화면이다. 각 컨테이너들의 멤버 함수들이 있는데, C++03버전과 C++11버전을 색으로 구분하여 가독성이 좋다.


아래는 C++17에 추가된 Filesystem 라이브러리다. boost에 있던 filesystem이 표준이 되면서 C++17에 추가되었는데, 개인적으로 엄청 유용하게 사용하던 라이브러리 중 하나인데 이제라도 표준이 되어 다행이다.


 

※ 참조 변수 요약
필자가 신입 때 부터 정말 많이 사용해온 참조 변수는 C++에서 사용 가능한 문법이다.(C언어는 안됨)
참조 변수란, 다른 변수를 참조하는 변수로써 주로 C언어의 포인터와 비교를 많이 하고는 한다. 주로 전달 인자를 함수에 넘길때 사용되며, 구조체나 클래스와 같이 덩치가 큰 타입에 사용하여 속도를 높인다. C언어에서는 문자열이나 구조체 등과 같이 덩치가 큰 타입을 포인터로 넘기지만 C++에서는 포인터 대신에 주로 참조를 사용한다. 
문법은 다음 포스팅부터 알아보도록 하겠다.

※ 참조 변수 특징
- 주 용도는 함수의 전달 인자(매개변수)에 사용한다.
- 구조체나 클래스와 같이 덩치가 큰 타입에 사용하기 적합하다.(덩치가 큰 타입을 복사해서 넘길 경우 느리기 때문)
- 참조 변수를 전달 인자로 사용하면 포인터처럼 복사본이 아닌 원본 데이터를 가지고 작업할 수 있다. (Call by reference)

※ 참조 변수와 포인터
- 포인터와 달리 참조자에는 NULL 참조라는 개념이 없다, 고로 선언될 때 반드시 초기화 해줘야 한다.
- 포인터는 중간에 가리키는 대상을 바꿀 수 있지만, 참조자는 const와 같아서 중간에 대상을 바꿀 수 없다.
- 참조자는 반드시 초기화 해줘야 하기 때문에 포인터처럼 사용하기 전, 유효성 검사를 할 필요가 없기에 더 효율적이다.

※ 참조 변수를 사용해야 하는 경우

- 참고하고자 하는 어떤 객체를 미리 알고 있을때

- 중간에 참조하는 대상을 바꿀 일이 결코 없을때

- 포인터를 사용하면 문법상 의미가 어색해지는 연산자를 구현할때(필자는 주로 STL 컨테이너를 사용할때임)


아래는 필자가 15년 09월 쯤에 제작한 클래스다.

operator>>들의 인자를 보면 죄다 참조 변수로 되어 있는데, 이처럼 참조는 클래스를 설계할 때도 필수적으로 사용된다.


+ Recent posts