參考類型函式引數
通常更有效率的方式是傳遞參考,而不是傳遞大型物件給函式。 這可讓編譯器傳遞物件位址,同時又可維護將用來存取物件的語法。 請考慮下列會使用 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 到 typename& 的標準轉換。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應