使用默认参数复制构造函数

fre*_*low 14 c++ optional-parameters copy-constructor

据我所知,复制构造函数必须是T(const T&)或者T(T&).如果我想在签名中添加默认参数怎么办?

T(const T&, double f = 1.0);
Run Code Online (Sandbox Code Playgroud)

这会符合标准吗?

ken*_*ytm 27

是.

§[class.copy]/2:

A类非模板的构造X是一个拷贝构造函数,如果它的第一个参数是类型X&,const X&,volatile X&或const volatile X&,并且或者有没有其他参数,否则所有其他参数默认参数 [ 例: X::X(const X&)和X::X(X&,int=1)复制构造函数.


Mic*_*yan 6

您可以创建两个不同的构造函数:

T(const T&)
T(const T&,double)
Run Code Online (Sandbox Code Playgroud)

但是,您拥有的是允许作为复制构造函数.

在旁注中,我发现在C++中使用默认参数通常不是一个好主意,而使用重载要好得多,其中参数较少的参数使用默认值调用具有更多参数的参数(当然,对于ISO C++ 2003中的构造函数来说,这是不可能的,但在ISO C++ 201x中允许委托构造函数.这样做的原因是默认值为您的函数提供了与其明显行为不同的实际签名,这使得在获取函数指针时有些困难/痛苦.通过提供重载,可以获取每种可能的调用类型的函数指针,而不需要任何类型的"绑定"机制来使其工作.