在默认构造函数签名中返回对象与引用

时间:2012-09-20 05:13:29

标签: c++ reference constructor default

基本上,有什么区别:

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?

1 个答案:

答案 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等函数不称为构造函数。