C++ Prime by Prata Ch. 8 Adventures in Functions

Function etc ..

C++ Inline Functions

일반 함수와의 차이는 ‘코딩’ 의 차이가 아닌 ‘컴파일이 어떻게 프로그램으로 가져오느냐’ 의 차이.

컴파일의 결과는 실행 프로그램이다. 실행 시 OS 는 메모리에 띄우고, 순차적으로 진행. 일반 함수는 다른 주소로 점프했다가 되돌아 옴.
함수 호출에 다다르면, 함수호출 후에 즉시 지시부분 주소를 메모리에 저장하고, 함수의 인수를 스택에 저장하고,  함수의 처음으로 지정된 메모리로 가서 함수를 실행하고 (결과값을 해당 레지스터에 저장하고), 주소가 저장된 지시부분으로 돌아온다.
앞으로, 뒤로 점프하는 과정은 함수 이용에 지연시간을 발생시킴.

C++ 인라인 함수는 대안 제시. 컴파일된 코드는 해당 함수로 대체함.  점프과정 없음.  하지만, 메모리는 더 사용.

인수에 식(4.5 + 3.5) 이 들어가면 그 값(8) 이 적용됨.  C의 매크로보다 우수.

별도의 프로토타입이 없어도 C++의 프로토타이핑 기능이 역할을 한다. 처음 나오는 부분이 프로토 기능을 함.  즉, 정수나 롱 을 넣어도 더블로 타입케스팅 된다.

Inline vs. Macros

#define SQARE(X) X*X
// 단순한 텍스트 대체..
#define SQARE(X) (X)*(X)
// 역시 '값'으로 전달하지는 않음.

매크로를 인라인으로 컨버팅하는 것을 추천.

Reference Variables

레퍼런스는 이미 정의된 변수에 대한 별명, 대안 이름.
함수에 대한 ‘포멀한 인수’ 로 쓰임. 레퍼런스로 주면 ‘복사된 값’ 이 아닌 ‘원래 데이터’ 를 갖고 기능 수행.
거대한 스트럭쳐 포인터에 대한 편리한 대안.

Creating a Reference Variable

& : 변수의 주소.

int rats;
int & rodents = rats; // 별명. ## 초기화 필요.  const 포인터 같은 성격.
int * pRodent = &rats; // 포인터. ## 초기화 불필요.

이 & 는 주소 연산자가 아님. 타입 지시자의 일부..  [char * ; pointer – to – char ]  처럼. [reference – to – int ] 임.

References as Function Parameters

[passing by value] : C 와의 단절..

포인터와 레퍼런스 비교 : 스와핑.

void swapRef (int & a, int & b) { ...  } // 그냥 불러주면 됨.. 훨씬 간결.
void swapPnt (int * a, int * b) { ...  } // 부를 때 ( & theVal .. ) 이런 식이 됨.

Program Notes

..

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중