값으로 반환하는 것과 void 함수를 통해 해당 값을 반환하는 것의 차이점

헤르 난 테란

다음은 내가 이해하려는 내용의 예입니다.

//no param function
std::string getPassword()
{
    std::string password;

    getline(std::cin, password);

    return password;
}

//param function by ref
std::string getPassword(std::string& password)
{
    getline(std::cin, password);

    return password;
}

//void param function by ref
void getPassword(std::string& password)
{
    getline(std::cin, password)
}

//in main
int main()
{
    std::string password;
    getPassword(password); //using void function

    //OR

    password = getPassword(); //using no param function

    //OR

    password = getPassword(password); //using param function

    return 0;
}

다음 중 암호를 검색하는 가장 좋은 방법은 무엇입니까? 특히 예를 들어 Netflix에 로그인하는 것과 같이 대규모로 이야기하고 있다면. 이 코드는 전문적인 환경에서 다르게 작성되었을 것입니다.하지만 이것은 제 요점을 이해하기위한 기본적인 예일뿐입니다. 이 질문에 대한 게시물을 찾을 수 없어서 물어볼 것이라고 생각했습니다. 값 / 참조로 반환하는 것과 void를 반환하는 것 (값을 반환하지 않음)의 차이를 알고 있으므로 걱정할 필요가 없습니다.

*** EDIT main의 문자열 변수 주소가 첫 번째 함수의 로컬 주소와 다른 것이 문제입니까? (첫 번째 기능이 가장 좋다고 결정한다면)

도움을 주신 분들께 감사드립니다!

G. 수면

std::string getPassword()가장 좋은 방법입니다. 반환 값 최적화 덕분에 참조 매개 변수를 사용하는 것만 큼 효율적 입니다. 사실 레지스터를 통해 전달할 수있는 매개 변수의 양이 제한되어 있기 때문에 훨씬 더 효율적일 수 있습니다. 따라서 많은 매개 변수를받는 함수가있는 경우 결과를 다시 전달하기 위해 다른 매개 변수를 추가하지 않는 것이 가장 좋습니다.

또한이 양식은 구성을 허용합니다. 예를 들어 암호의 해시 만 필요한 경우 다음과 같이 작성할 수 있습니다.

auto hash = make_hash(getpassword());

매개 변수를 통해 반환하면 세 줄의 코드를 작성해야합니다.

std::string password; // can't use auto here!
getpassword(password);
auto hash = make_hash(password);

또 다른 이점은 [[nodiscard]]C ++ 17 속성으로 반환 값을 표시 할 수 있으므로 다음과 같이 작성하면 컴파일러 경고가 표시된다는 것입니다.

getpassword();

마지막으로 반환 값을 사용하여 반환 할 수 있지만 참조 매개 변수를 사용하여 다시 전달할 수는없는 형식 (람다 함수 형식과 같이)에 할당 할 수 없거나 이름을 지정할 수없는 형식이 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

코드에서 오류를 처리 할 때 호출 체인을 통해 단일 "오류"값을 진입 점으로 반환하는 것이 허용됩니까?

분류에서Dev

데이터 프레임 열의 값을 반복하는 것과 열의 데이터에 변수를 할당하는 것의 차이점은 무엇입니까?

분류에서Dev

메서드의 반환 값을 사용하는 것과 떠나는 것의 차이점은 무엇입니까?

분류에서Dev

반환 값을 -32767과 0x8000으로 확인하여 GetAsyncKeyState ()를 사용하는 것의 차이점은 무엇입니까?

분류에서Dev

JS Module : 객체에서 직접 함수를 반환하는 것과 함수를 반환하는 객체에서 함수를 반환하는 것의 차이점

분류에서Dev

단위 테스트를 위해 아무것도 반환하지 않는 파이썬 함수 내부의 값을 어떻게 얻습니까?

분류에서Dev

조건을 충족하고 해당 숫자를 반환하는 값의 수를 재귀 적으로 계산

분류에서Dev

onclick react에서 함수 이름을 전달하는 것과 콜백을 통해 호출하는 것의 차이점은 무엇입니까?

분류에서Dev

ColdFusion에서 함수를 변수로 설정하는 것과 해시 태그로 함수를 호출하는 것의 차이점은 무엇입니까?

분류에서Dev

당신은 자바 열거의 모든 정의 된 값을 통해 전환하는 것을 강제 할 수있는 방법이 있나요?

분류에서Dev

함수 호출을 반환하는 것과 재귀 중에 함수를 다시 호출하는 것의 차이점은 무엇입니까?

분류에서Dev

메서드의 결과 값을 할당하는 것이 해당 메서드를 다시 호출하는 것보다 빠릅니까?

분류에서Dev

eslint에서 "화살표 함수에서 값을 반환 할 것으로 예상 됨"오류를 해결하는 방법

분류에서Dev

최대 값의 해당 날짜를 반환하는 방법

분류에서Dev

await 키워드로 작업을 반환하는 것과 await 키워드없이 반환하는 것의 주요 차이점은 무엇입니까?

분류에서Dev

객체 포인터를 반환하는 함수를 void 포인터를 반환하는 함수로 캐스팅하는 것이 합법적입니까?

분류에서Dev

값을 반환하는 것이 지역 변수를 반환하는 것보다 낫습니까?

분류에서Dev

일단 찾은 문자열로 테이블을 검색하면 해당 열과 다른 값을 가져와 해당 값으로 결과를 반환합니다.

분류에서Dev

해당 요소 중 하나의 값 확인 결과로 요소 값을 반환하는 방법

분류에서Dev

HttpResponseMessage를 반환하는 것과 webapi에서 직접 뷰 모델을 반환하는 것의 차이점은 무엇입니까?

분류에서Dev

잘못된 값을 반환하는 이중 해싱 함수

분류에서Dev

잘못된 값을 반환하는 이중 해싱 함수

분류에서Dev

값을 반환하기 위해 뮤텍스를 잠그는 것이 현명합니까?

분류에서Dev

완전한 결과를 반환하는 것으로 "python -3"을 신뢰해야합니까?

분류에서Dev

functionName ()을 사용하여 변수 값을 할당하는 것과 functionName 만 사용하는 것의 차이점은 무엇입니까?

분류에서Dev

ReST를 사용하는 것과 Sphinx로 문서를 작성하기 위해 HTML을 사용하는 것의 차이점은 무엇입니까?

분류에서Dev

포인터를 통해 값에 액세스하는 것과 임시 값으로 저장하는 것의 효율성

분류에서Dev

ES6에 최종 반환 값을 포함하여 반복자를 수집하는 것이 있습니까?

분류에서Dev

함수에서 값을 반환하는 것이 작동하지 않습니다.

Related 관련 기사

  1. 1

    코드에서 오류를 처리 할 때 호출 체인을 통해 단일 "오류"값을 진입 점으로 반환하는 것이 허용됩니까?

  2. 2

    데이터 프레임 열의 값을 반복하는 것과 열의 데이터에 변수를 할당하는 것의 차이점은 무엇입니까?

  3. 3

    메서드의 반환 값을 사용하는 것과 떠나는 것의 차이점은 무엇입니까?

  4. 4

    반환 값을 -32767과 0x8000으로 확인하여 GetAsyncKeyState ()를 사용하는 것의 차이점은 무엇입니까?

  5. 5

    JS Module : 객체에서 직접 함수를 반환하는 것과 함수를 반환하는 객체에서 함수를 반환하는 것의 차이점

  6. 6

    단위 테스트를 위해 아무것도 반환하지 않는 파이썬 함수 내부의 값을 어떻게 얻습니까?

  7. 7

    조건을 충족하고 해당 숫자를 반환하는 값의 수를 재귀 적으로 계산

  8. 8

    onclick react에서 함수 이름을 전달하는 것과 콜백을 통해 호출하는 것의 차이점은 무엇입니까?

  9. 9

    ColdFusion에서 함수를 변수로 설정하는 것과 해시 태그로 함수를 호출하는 것의 차이점은 무엇입니까?

  10. 10

    당신은 자바 열거의 모든 정의 된 값을 통해 전환하는 것을 강제 할 수있는 방법이 있나요?

  11. 11

    함수 호출을 반환하는 것과 재귀 중에 함수를 다시 호출하는 것의 차이점은 무엇입니까?

  12. 12

    메서드의 결과 값을 할당하는 것이 해당 메서드를 다시 호출하는 것보다 빠릅니까?

  13. 13

    eslint에서 "화살표 함수에서 값을 반환 할 것으로 예상 됨"오류를 해결하는 방법

  14. 14

    최대 값의 해당 날짜를 반환하는 방법

  15. 15

    await 키워드로 작업을 반환하는 것과 await 키워드없이 반환하는 것의 주요 차이점은 무엇입니까?

  16. 16

    객체 포인터를 반환하는 함수를 void 포인터를 반환하는 함수로 캐스팅하는 것이 합법적입니까?

  17. 17

    값을 반환하는 것이 지역 변수를 반환하는 것보다 낫습니까?

  18. 18

    일단 찾은 문자열로 테이블을 검색하면 해당 열과 다른 값을 가져와 해당 값으로 결과를 반환합니다.

  19. 19

    해당 요소 중 하나의 값 확인 결과로 요소 값을 반환하는 방법

  20. 20

    HttpResponseMessage를 반환하는 것과 webapi에서 직접 뷰 모델을 반환하는 것의 차이점은 무엇입니까?

  21. 21

    잘못된 값을 반환하는 이중 해싱 함수

  22. 22

    잘못된 값을 반환하는 이중 해싱 함수

  23. 23

    값을 반환하기 위해 뮤텍스를 잠그는 것이 현명합니까?

  24. 24

    완전한 결과를 반환하는 것으로 "python -3"을 신뢰해야합니까?

  25. 25

    functionName ()을 사용하여 변수 값을 할당하는 것과 functionName 만 사용하는 것의 차이점은 무엇입니까?

  26. 26

    ReST를 사용하는 것과 Sphinx로 문서를 작성하기 위해 HTML을 사용하는 것의 차이점은 무엇입니까?

  27. 27

    포인터를 통해 값에 액세스하는 것과 임시 값으로 저장하는 것의 효율성

  28. 28

    ES6에 최종 반환 값을 포함하여 반복자를 수집하는 것이 있습니까?

  29. 29

    함수에서 값을 반환하는 것이 작동하지 않습니다.

뜨겁다태그

보관