共用方式為


參考類型函式引數

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

另請參閱

參考