【问题标题】:copy constructor with default arguments具有默认参数的复制构造函数
【发布时间】:2010-05-07 09:40:58
【问题描述】:

据我所知,复制构造函数的格式必须为T(const T&)T(T&)。如果我想在签名中添加默认参数怎么办?

T(const T&, double f = 1.0);

这是否符合标准?

【问题讨论】:

标签: c++ copy-constructor optional-parameters


【解决方案1】:

是的。

§[class.copy]/2:

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

【讨论】:

    【解决方案2】:

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

    T(const T&)
    T(const T&,double)
    

    但是,您所拥有的内容是允许作为复制构造函数的。

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

    【讨论】:

    • 好点。获取重载函数的地址也很痛苦,IMO,但至少它有效。
    猜你喜欢
    • 2017-09-27
    • 2016-09-05
    • 2015-01-28
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2018-04-08
    相关资源
    最近更新 更多