引用类型的函数参数
通常更为有效的通过引用,而不是大型对象,为函数。 这允许编译器通过对象的地址,同时维护将用于访问对象的语法时。 考虑使用 Date framework 的以下示例:
// 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()
{
}
上面的代码表示,传入机制的成员引用捕获使用成员选择运算符 (.) 而不是指针成员选择运算符 (– AMP_GT)。
尽管传递的参数引用类型的非指针类型语法,它们只指针类型的一个重要特征:它们可修改,除非声明为 const。 由于上述代码的目的不是修改对象 GDate,更合适的函数原型是:
long JulianFromGregorian( const Date& GDate );
此原型确保函数 JulianFromGregorian 不会更改其参数。
,因为存在标准转换从 类型 到 *typename,*任何函数原型作为采用引用类型可以接受对象相同的输入该位置。