參考型別的函式引數
它通常會較有效率傳遞的參考,而不是函式的大型物件。這會讓編譯器將會被用來存取物件的語法,維持傳遞物件的位址。請考慮下列範例使用Date結構:
// reference_type_function_arguments.cpp
struct Date
{
short DayOfWeek;
short Month;
short Day;
short Year;
};
// Create a Julian date of the form DDDYYYY
// from a Gregorian date.
long JulianFromGregorian( Date& GDate )
{
static int cDaysInMonth[] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
long JDate = 0;
// Add in days for months already elapsed.
for ( int i = 0; i < GDate.Month - 1; ++i )
JDate += cDaysInMonth[i];
// Add in days for this month.
JDate += GDate.Day;
// Check for leap year.
if ( GDate.Year % 100 != 0 && GDate.Year % 4 == 0 )
JDate++;
// Add in year.
JDate *= 10000;
JDate += GDate.Year;
return JDate;
}
int main()
{
}
上述程式碼會顯示透過參考而傳遞結構的成員使用 [成員選取運算子存取 (.) 而非指標成員選取運算子 (->)。
雖然傳成參考型別引數會觀察到的非指標型別語法,它們會保留一個重要的特性,是指標型別: 它們是除非宣告為可修改 const。因為先前的程式碼的目的是不能修改物件,所以GDate,更適當的函式原型是:
long JulianFromGregorian( const Date& GDate );
這個原型可確保該函式JulianFromGregorian不會變更它的引數。
任何函式原型運用參考型別可以接受在相同的位置相同的型別的物件,因為沒有標準轉換是型別名稱 到 型別名稱與。