참조 형식 함수 인수
보통은 큰 개체보다 참조를 함수에 전달하는 것이 더 효율적입니다. 이렇게 하면 개체에 액세스하는 데 사용된 구문을 유지하면서 컴파일러가 개체의 주소를 전달할 수 있습니다. Date
구조체를 사용하는 다음 예제를 살펴보십시오.
// reference_type_function_arguments.cpp
#include <iostream>
struct Date
{
short Month;
short Day;
short Year;
};
// Create a date of the form DDDYYYY (day of year, year)
// from a Date.
long DateOfYear( Date& date )
{
static int cDaysInMonth[] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
long dateOfYear = 0;
// Add in days for months already elapsed.
for ( int i = 0; i < date.Month - 1; ++i )
dateOfYear += cDaysInMonth[i];
// Add in days for this month.
dateOfYear += date.Day;
// Check for leap year.
if ( date.Month > 2 &&
(( date.Year % 100 != 0 || date.Year % 400 == 0 ) &&
date.Year % 4 == 0 ))
dateOfYear++;
// Add in year.
dateOfYear *= 10000;
dateOfYear += date.Year;
return dateOfYear;
}
int main()
{
Date date{ 8, 27, 2018 };
long dateOfYear = DateOfYear(date);
std::cout << dateOfYear << std::endl;
}
앞의 코드는 참조로 전달된 구조체의 멤버가 포인터 멤버 선택 연산자(->) 대신 멤버 선택 연산자(.)를 사용하여 액세스됨을 보여 줍니다.
참조 형식으로 전달된 인수는 포인터가 아닌 const
형식의 구문을 관찰하지만 포인터 형식의 한 가지 중요한 특징을 유지합니다. 이 코드에는 date
개체를 수정할 의도가 없기 때문에 더 적절한 함수 프로토타입은 다음과 같습니다.
long DateOfYear( const Date& date );
이 프로토타입은 DateOfYear
함수가 인수를 변경하지 않도록 합니다.
참조 형식을 사용하는 것으로 프로토타입화된 함수는 형식 이름에서 typename으로 표준 변환이 있기 때문에 해당 위치에 동일한 형식의 개체를 허용할 수 있습니다.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기