參考類型函式引數

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

通常更有效率的方式是傳遞參考,而不是傳遞大型物件給函式。 這可讓編譯器傳遞物件位址,同時又可維護將用來存取物件的語法。 請考慮下列會使用 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 函式不會變更其引數。

任何採用參考類型的函式原型都可以在該位置接受相同類型的物件,因為其中會進行從 typenametypename& 的標準轉換。

參考

顯示: