인라인 함수
인라인 함수는 일반 함수에 비하여 실행속도에 이점이 있습니다.
#include <iostream>
int Square(int);
int main(void) {
std::cout << Square(5);
}
inline int Square(int a) {
return a * a;
}
25 |
위 코드는 간단한 인라인 함수의 예시를 보여주고 있습니다. 인라인 함수를 정의하는 법은 기존 함수에 앞에 inline을 붙여주기만 하면 됩니다.
네임 스페이스
동일한 이름의 함수가 여러 개 있을 때 함수끼리의 충돌을 방지하기 위해 함수가 위치하는 공간을 정해주어야 합니다. 이때 쓰이는 공간을 네임 스페이스라고 합니다.
#include <iostream>
namespace first {
int Square(int);
}
namespace second {
int Square(int);
}
int main(void) {
std::cout << second::Square(5);
return 0;
}
int first::Square(int a) {
return a * a;
}
int second::Square(int a) {
return a * a * a;
}
125 |
네임 스페이스 안의 요소를 사용할 때는 "네임 스페이스::요소"의 형태로 사용해야 합니다. 메인함수에서 second::Square(5)를 호출하여 세제곱인 125가 출력됩니다.
네임 스페이스의 중첩과 별칭
네임 스페이스 안에 또 다른 네임 스페이스를 정의할 수 있습니다. 그리고 중첩된 요소를 사용할 때에는 first::second::num1과 같은 형태로 사용합니다. 만약 중첩이 여러 번 된 네임스페이스를 간단히 사용하고 싶다면, 별칭을 붙일 수 있습니다. namespace fst=first::second::third; 이렇게 선언하게 되면 가장 안쪽의 third 대신 fst로 대체할 수 있습니다.
#include <iostream>
namespace first {
namespace second {
namespace third {
int Square(int);
}
}
}
namespace fst = first::second::third;
int main(void) {
std::cout << fst::Square(5);
return 0;
}
int fst::Square(int a) {
return a * a;
}
25 |
using
이제 cout,cin,endl을 사용할 때 왜 std::를 붙여야 하는지 알 수 있을 것입니다. 셋 모두 std라는 네임 스페이스 안에 있기 때문입니다. using을 사용하면 앞에 귀찮게 네임스페이스를 명시하지 않아도 됩니다. using std::cout;이라는 선언은 cout을 알아서 std에서 찾으라는 의미입니다. 그래서 using std::cout; using std::cin; using std::endl; 을 입력해주면 std::를 붙이지 않아도 됩니다. std안에 있는 모든 것에 대해 한번에 생략하는 방법도 있습니다. using namespace std;라고 선언하면 됩니다. 하지만 using선언을 할 때마다 이름충돌이 발생할 확률은 올라가기 때문에 적절한 using의 사용이 필요합니다.
#include <iostream>
using namespace std;
int main(void) {
char ment[20];
cout << "아무말이나 입력하세요"<<endl;
cin >> ment;
cout << ment << "(메아리)";
return 0;
}
야호~! 야호~!(메아리) |
3열의 'using namespace std;' 를 'using std::cout; using std::cin; using std::endl;' 세줄로 대체해도 같은 결과가 나옵니다.
'C & C++ > 윤성우의 열혈 C++ 프로그래밍' 카테고리의 다른 글
[열혈 C++] 구조체와 클래스 (0) | 2024.02.04 |
---|---|
[열혈 C++] malloc & free를 대신하는 new & delete (0) | 2024.01.24 |
[열혈 C++] const의 의미와 참조자 (0) | 2023.12.19 |
[열혈 C++] OOP 단계별 프로젝트 01단계 (0) | 2023.12.14 |
[열혈 C++] 함수 오버로딩과 매개변수의 디폴트 값 (0) | 2023.12.13 |