[이것이 C++이다] Part 01. C에서 C++로 문법 전환하기 (4)
2.3 인라인 함수
- 함수 호출에 의한 오버헤드를 줄이기 위해 보통 매크로를 사용합니다.
- 함수 호출 시 스택 메모리 사용 증가, 매개변수 메모리 복사, 스택 조정, 제어 이동 등의 작업이 이루어 집니다.
- 하지만 함수가 아닌 매크로는 가독성, 논리적 오류 등 여러 문제의 원인이 될 수 있습니다.
- 이러한 매크로를 대신해 인라인 함수를 사용할 수 있습니다.
- 함수와 사용법은 동일하나 내부적으로는 매크로처럼 함수를 호출하지는 않습니다.
-
같은 코드가 기계어에 반복적으로 등장할 수 있기 때문에 일정 길이 수준 이상의 코드는 인라인 함수로 작성하지 않는 것이 더 좋습니다.
inline int Add(int a, int b) { return a+b; }
2.4 Namespace
2.4.1 namespace
- namespace 키워드를 사용해 변수와 함수들을 하나의 소속으로 묶을 수 있습니다.
- 아래 예제에서 namespace는 TEST, std, global(전역) 세 가지 입니다.
-
C++ 에서 namespace에 포함되지 않는 식별자는 없습니다. (최소 전역)
namespace TEST { int nData = 100; void testFunc(void) { std::cout << "TEST::testFunc()" << std::endl; } } int main(void) { TEST::testFunc(); std::cout << TEST::nData << std::endl; return 0; } // TEST::testFunc() // 100
2.4.2 using
-
using 키워드로 소속을 감출 수 있습니다.
using namespace std;
2.4.3 중첩
- namespace 안에 또 다른 namespace가 속할 수 있습니다.
2.4.4 namespace와 다중정의
- namespace를 직접 기술하여 호출을 구별해야 합니다.
-
소속이 다르면 이름이 같아도 다른 함수/변수 입니다.
namespace TEST { int test_data; namespace TEST_DEV { int test_data; } } // TEST::test_data // TEST::TEST_DEV::test_data // 두 변수는 다른 변수다.
2.5 식별자 검색 순서
- 현재 블록 범위
- 상위 블록 범위 (함수 Body)
- 클래스 멤버
- 부모 클래스 멤버
- 가장 최근에 선언된 전역 함수/변수
- 상위 Namespace
- using 선언된 식별자 or 전역 식별자 (모호성 주의)