[C++] inline 함수의 제한사항 관련 질문
글쓴이: gyxor / 작성시간: 화, 2003/09/30 - 3:10오후
* inline 함수의 제약조건
- inline 함수 내에서는 루프문(do whie, while, for), switch, goto문을 사용할 수 없다.
- inline 함수호출시 호출되기 전에 먼저 inline 함수가 정의되어 있어야 한다.
- inline 함수 내에서 재귀호출을 할수 없다.
- inline 함수는 한 수식 내에서 두 번이상 호출될수 없다.
- 함수 포인터로 inline 함수의 주소를 취할 수 없다.
- inline 함수는 호출방식이 아니라 치환전개방식이기 때문이다.
#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; }
이 소는 인라인 함수의 재귀호출을 했고
정의 부분을 뒤에 선언하였고..
한블럭에서 두번이상 호출했습니다.
하지말라는것을 거의다 해봤는데 다 됩니다...
왜 그런것일까요?
어떤 답변을 찾아보니까..
1 .클래스 내부에서는 기본적으로 함수를 인라인으로 취급을 한다고 하고
2 .또 인라인 함수의 구현에 어긋나면 그냥 일반함수로 취급을 한다고
하더라구요
이 두가지가 맞나요?
그래서 위 사항이 가능한 것인가요?
답변부탁드립니다.
Forums:
inline 은 강제로 이 함수가 인라인이어야 한다고 하는 것이 아니라
inline 은 강제로 이 함수가 인라인이어야 한다고 하는 것이 아니라 inline 이었으면 좋겠다고 컴파일러에게 알려주는 지시자로 알고 있습니다. 그리고 클래스 선언 내부에 멤버함수의 구현이 있다면 인라인을 시도하는 것으로 알고 있습니다.
그리고, 컴파일러는 inline 이 있는 함수를 인라인하지 못했을 경우 경고 메시지를 출력하고, 만약 인라인하지 못했을 경우에는 일반 함수처럼 취급된다고 알고 있습니다.
inline 의 효용성과 문제점, 조심해야 할 점은 meyers 의 effective 시리즈에 기술되어 있습니다. 참고하시기 바랍니다.
그럼, 이만...
댓글 달기