- inline 함수 내에서는 루프문(do whie, while, for), switch, goto문을 사용할 수 없다.
- inline 함수호출시 호출되기 전에 먼저 inline 함수가 정의되어 있어야 한다.
- inline 함수 내에서 재귀호출을 할수 없다.
- inline 함수는 한 수식 내에서 두 번이상 호출될수 없다.
- 함수 포인터로 inline 함수의 주소를 취할 수 없다.
- inline 함수는 호출방식이 아니라 치환전개방식이기 때문이다.
[-] Collapse
#include<iostream>
using namespace std;
static int i=3;
inline int show();
class A
{
private :
int i;
double x;
public:
inline int show();
};
int main()
{
show();
i=5;
show();
A test;
test.show();
return 0;
}
int A::show()
{
cout << "cl" << "\n";
static int i=3;
i--;
if(i>0)
show();
else return 0;
}
int show()
{
int a=10;
cout << "re" << endl;
i--;
if(i>0)
show();
else return 0;
}
using namespace std;
static int i=3;
inline int show();
class A
{
private :
int i;
double x;
public:
inline int show();
};
int main()
{
show();
i=5;
show();
A test;
test.show();
return 0;
}
int A::show()
{
cout << "cl" << "\n";
static int i=3;
i--;
if(i>0)
show();
else return 0;
}
int show()
{
int a=10;
cout << "re" << endl;
i--;
if(i>0)
show();
else return 0;
}
이 소스는 인라인 함수의 재귀호출을 했고
정의 부분을 뒤에 선언하였고..
한블럭에서 두번이상 호출했습니다.
하지말라는것을 거의다 해봤는데 다 됩니다...
왜 그런것일까요?
1 .클래스 내부에서는 기본적으로 함수를 인라인으로 취급을 한다
2 .또 인라인 함수의 구현에 어긋나면 그냥 일반함수로 취급을 한다
inline 은 강제로 이 함수가 인라인이어야 한다고 하는 것이 아니라 inline 이었으면 좋겠다고 컴파일러에게 알려주는 지시자로 알고 있습니다. 그리고 클래스 선언 내부에 멤버함수의 구현이 있다면 인라인을 시도하는 것으로 알고 있습니다.
그리고, 컴파일러는 inline 이 있는 함수를 인라인하지 못했을 경우 경고 메시지를 출력하고, 만약 인라인하지 못했을 경우에는 일반 함수처럼 취급된다고 알고 있습니다.
inline 의 효용성과 문제점, 조심해야 할 점은 meyers 의 effective 시리즈에 기술되어 있습니다. 참고하시기 바랍니다.
댓글 없음:
댓글 쓰기