.h #ifndef VS Pragma Once
ifndef 는 해당 헤더파일이 정의되어있지 않은 경우에만 실행한다. 만약 중복으로 호출될경우 전처리기를 통해 #ifndef를 계속해서 확인해서 중복을 피한다.
Pragma Once는 기능 자체가 이 파일은 딱 한번만 컴파일 하겠다 라는 뜻을 가지고있다.
때문에 ifndef 보다 Pragma Once가 속도적인 측면에서 더빠르다고 할 수 있다.
매개변수와 인자에 관해
함수를 정의할때 괄호안에 넣는 변수명을 매개변수라고한다.
함수를 호출할때 그 함수에 넘겨주는 값을 인자라고한다.
함수는 호출될때 받은 매개변수를 스택에 복사하는 행위가 일어난다.
복사생성자의 매개변수를 const & 형으로 받지않으면 안되는 이유
클래스는 기본적으로 얕은복사를 해주는 디폴트 복사생성자를 가지고있다.
그래서 복사생성자를 새로 정의할때 매개변수를 const 참조형으로 받지 않고 복사 생성자와 대입연산자를 구현했을때 클래스 복사가 일어날 경우 (대입연산자를 이용하여 해당 클래스를 매개변수로 전달할시) 무한초기화가 일어나게된다. ex) void 클래스::print(클래스 인스턴스) 를 한다고 했을때
함수 내부에서는 받아온 매개변수를 스택에 복사하는 과정이 생긴다. 해당과정에서 복사생성자가 호출되기때문에 복사생성자의 매개변수가 const 참조형이 아닐경우 매개변수가 복사생성자 호출-> 다시 매개변수가 복사생성자 호출 이 무한반복이 일어나게 된다. 해당이유때문에 복사생성자를 만들때는 const 참조형을 사용하지 않으면 안되는것이다.