2014-11-17 5 views
-1

인라인 함수를 마지막으로 확인한 것은 함수가 호출되는 프로그램의 모든 지점에서 본문이 직접 대체되는 함수입니다.C++ 인라인 함수, 값으로 전달 된 매개 변수

#include <iostream> 
inline void increment(int n) { n = n + 1; }` 
int main() { 
    int n = 0; 
    increment(n); 
    std::cout << "Result " << n; 
} 

내가이 있어야합니다 :이 수행 할 때 그래서 대신 결과 1. 를, 내가 0

을 얻을 어떻게 인라인 함수 작동합니까?

inline void increment(int& n) { 
    ++n; 
} 

당신은 사본을 요구하고, 하나가 있어요 :

+0

[함수/메서드에 대해 키워드 '인라인'을 사용해야하는 경우는 언제입니까?] (0120-13755/701092) – 0x499602D2

+1

함수의 논리적 동작은 인라인인지 여부에 관계없이 동일합니다. –

+0

참조로 전달하십시오. 매개 변수의 * copy *를 증가 시키면 실행이 함수를 떠난 후에 복사본이 사라집니다. –

답변

4

'inline'은 매크로가하는 것처럼 텍스트를 함수 본문으로 대체하지 않습니다. 함수 호출을 EQUIVALENT 생성 코드로 바꿔 기능적으로 인라인이 아닌 경우와 다르지 않습니다.

+0

이 문제는 함수의'inline'이 아니라 매개 변수가 전달되는 방식입니다. OP가 실제 변수가 아닌 전달 된 변수의 ** 사본 **을 수정 중입니다. –

+0

질문은 명시 적으로 "어떻게 인라인 함수가 작동합니까?"가 아니라 "이 값을 'n'값으로 수정 할 수 있습니까? – rafeek

4

이것은 인라인 되 고 있지만 방법 서명이 잘못되는 문제가 아니다. 대신 참조를 요청하십시오. 인라인 함수매크로을 혼동하지 마십시오. 동일하지 않습니다. 실제로, 컴파일 설정에 따라 컴파일러가이 호출을 수행하므로 보통 inline을 선언하는 것이 비생산적입니다.

0

인라인하는 동안 고려해야 할 두 가지 사항이 있습니다.

1) 인라인은 함수 호출과 관련된 오버 헤드를 피하기 위해 함수 호출을 본문으로 대체하는 명령보다는 컴파일러에 대한 요청입니다.

2) getters/setter처럼 꽤 작은 함수를 항상 인라인해야합니다. 큰 함수 나 재귀 함수를 인라이닝 (inlining)하면 인라 인 (inlining) 목적을 상실하는 코드가 부풀어 오르기 때문입니다.

또한 인라인 함수에는 정적 링크가 있습니다.