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