基本上,有什么区别:
const Date& default_date()
{
static Date dd(2001,Date::Jan,1);
return dd;
}
和
const Date default_date()
{
static Date dd(2001,Date::Jan,1);
return dd;
}
功能签名真的重要吗?我不认为Date&像* Date这样的类型,所以我不确定它有什么不同。它是否只是阻止在返回时制作副本?但那你不会回来& dd?
答案 0 :(得分:3)
第一个函数返回对静态对象的const引用,因此您可以这样做:
const Date& d = default_date(); // d is a reference to the original
或
Date d = default_date(); // d is a copy of the original,
// provided there is a copy constructor
第二个制作static Date
对象的副本,因此您只能获得副本
Date d = default_date(); // d is a copy of the original
返回&dd
将返回静态对象的地址,然后可以将其指定给指向Date
的指针。对于按引用返回或按值返回,return语句的语法是相同的。语义取决于函数的返回类型。
请注意,在C ++中,default_date
等函数不称为构造函数。