다음은 내가 이해하려는 내용의 예입니다.
//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의 문자열 변수 주소가 첫 번째 함수의 로컬 주소와 다른 것이 문제입니까? (첫 번째 기능이 가장 좋다고 결정한다면)
도움을 주신 분들께 감사드립니다!
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] 삭제
몇 마디 만하겠습니다