据我所知,复制构造函数的形式必须是T(const T&)
or T(T&)
。如果我想在签名中添加默认参数怎么办?
T(const T&, double f = 1.0);
那会符合标准吗?
据我所知,复制构造函数的形式必须是T(const T&)
or T(T&)
。如果我想在签名中添加默认参数怎么办?
T(const T&, double f = 1.0);
那会符合标准吗?
是的。
§[class.copy]/2:
类的非模板构造函数
X
是一个复制构造函数,如果它的第一个参数是,或类型X&
,并且没有其他参数,或者所有其他参数都有默认参数[示例:并且是复制构造函数。const X&
volatile X&
const volatile X&
X::X(const X&)
X::X(X&,int=1)
您可以创建两个不同的构造函数:
T(const T&)
T(const T&,double)
但是,您所拥有的内容是允许作为复制构造函数的。
附带说明一下,我发现在 C++ 中使用默认参数通常不是一个好主意,相反,使用重载要好得多,其中参数较少的重载使用默认值调用具有更多参数的重载(当然,在 ISO C++ 2003 中使用构造函数是不可能的,但在 ISO C++ 201x 中允许委托构造函数)。这样做的原因是,默认值为您的函数提供了与其明显行为不同的实际签名,这使得在获取指向函数的指针时有些困难/痛苦。通过提供重载,可以采用每种可能的调用类型的函数指针,而不需要任何类型的“绑定”机制来使其工作。