2013-04-04 3 views
1

저는 C++을 처음 접하는 자바 프로그래머입니다. 아래 코드에서 if (condition1)이 true 인 경우 variable1이 반환됨을 알 수 있습니다. 그러나 두 번째 if가 첫 번째 if 조건이 true로 평가 된 후에도 처리되는 메커니즘이 있습니까? 나는 이와 같은 코드를 보았고 디버깅하는 동안 발견했기 때문에 이것을 묻습니다.C++에서 return 문 다음에 코드를 실행할 수 있습니까?

if(condition1) 
{ 
    return variable1; 
} 

//do some processing here 

if(condition2) 
{ 
    return variable2; 
} 
+6

이 condition1' 사실인지 아닌지 '여부에 따라 상기의 프로그램. – chris

+1

명령문이 실행되는 경우 아닙니다. 'return'은 현재 함수에서 돌아와 실행을 떠나는 것을 의미합니다. –

+0

첫 번째 if에서 돌아 오지 않는 한 yes가 계속됩니다. – Muggen

답변

3

함수는 반드시 1과 정확히 1 return 문을 실행해야합니다.

따라서 return variable1은 실행되거나 if(condition2)이지만 둘 다 실행되지는 않습니다.

+0

나는 OP가 그것이 실행되었는지를 묻고 있다고 믿습니다 * when 'condition1' 사실이다*. –

+0

@KyleStrand는 내 대답을 게시 한 후 그의 질문을 편집했습니다. 그 이후로 내 대답을 편집하여 –

+0

과 일치하도록했습니다. 알았습니다. 알았다. –

0

내가 아는 한 (또는 적어도 선생님이 말했듯이) return전에 전에 재귀 함수를 제외하고 사용하는 것은 좋은 생각이 아닙니다.

if(condition1) 
{ 
    ans = variable1; 
} 

/* more code */ 

if(condition2) 
{ 
    ans = variable2; 
} 
return ans; 
+3

나는 그것도 들었다. 그리고 개인적으로, 나는 동의하지 않는다. 그것은 스타일 선호도이고, 작고 읽기 쉬운 함수를 만들면,'return' 문을 일찍 시작하는 것이 매우 쉽고 불필요한 코드가 실행되는 것을 막을뿐만 아니라 불필요한 중첩 된 블록을 막을 수 있습니다. –

+0

@JoeEnos 귀하의 의견에 감사드립니다. 어쩌면이 경우에는'if (21) {return v1; – Barranka

+1

개인적으로 대개 return 문을 먼저 가져 오는 것이 더 좋으므로 나중에 코드를 들여 쓸 필요가 없습니다. – chris

1

아니, 코드가 return 후 실행되지 않습니다 : 내가 제안

당신은 당신이 함수의 결과로 반환하고 함수의 마지막에 반환하려는 값을 저장하는 변수를 사용 진술에 도달했다. 그러나 condition1이 거짓이면 return 문에 도달하지 않으므로 실행이 정상적으로 진행됩니다. 이것은 Java가 동작하는 것과 똑같습니다.

초기 return 진술에 대한 논쟁이 있지만 개인적으로 도움이됩니다. 그것들을 피하려고하면, 임시 변수가 실제로 좋은 또는 큰 범위가 아니기 때문에 외래어로 이어질 수 있습니다. 범위가 넓어서 읽는 것이 대부분 혼란 스럽습니다.

4

아니요. 일단 return이 발생하면 함수의 다른 항목은 처리되지 않습니다.

+0

완전히 사실이 아닙니다. @dasblinkenlight에서 제안한 것처럼 지역 변수의 소멸자는'return' 문이 발생한 후에 아직 호출되지 않습니다. – STremblay

+0

OP가 두 번째 조건이 실행될 것인지 묻는 것처럼 보입니다. 그건 그렇지 않을거야. –

0

호출 된 경우에만 실행됩니다. 어느 시점에서, 당신은 그 기능/방법을 떠난다. 조건 1이 거짓이면 추가 처리를 실행 한 다음 조건 2를 테스트합니다.

이제 귀하의 코드가 컴파일되지 않습니다. (나는 Java가 아님을 알고 있습니다.) 어느 조건을 만족 시켜도 잃어 버릴 수 있기 때문입니다. 따라서 if 문 외부에서 약간의 반환을해야합니다.

간단히 말하면 반환이 호출 된 후 코드 실행이 발생하지 않습니다.

10

return 문 다음에 코드를 실행하는 방법이 있지만 return 문을 실행 한 후에 다시 돌아갈 방법이 없습니다. 여기

는 일부 코드가 return 문 이후에 실행 할 수있는 방법입니다 :

struct AfterReturn { 
    ~AfterReturn() { 
     // This code will run when an AfterReturn object goes out of scope 
     cout << "after return" << endl; 
    } 
}; 

int foo() { 
    AfterReturn guard; // This variable goes out of scope on return 
    cout << "returning..." << endl; 
    return 5; 
    // This is when the destructor of "guard" will be executed 
} 

int main() { 
    cout << foo() << endl; 
    return 0; 
} 

prints

returning... 
after return 
5 
관련 문제