为什么复制ctor的参数通过引用传递?

Tas*_*man 0 c++ constructor initialization copy-constructor

为什么这个论点不是通过价值传递的?

当我尝试它时,我的编译器只给了我一条消息,说"你可能意味着" Foo(const Foo&).

这是什么原因?

WiS*_*GaN 7

因为传递值首先需要复制构造函数.

因此,为了避免无限递归,如果我们确实希望通过值1传递,则必须在传递值版本之前定义传递引用复制构造函数.由于通过值复制构造函数没有多大意义,标准禁止它.


T.C*_*.C. 5

您根本不允许按值传递它 - 标准的§12.8[class.copy]/p6明确禁止它:

如果一个类的构造函数X的第一个参数是类型(可选择cv-qualified)X并且没有其他参数,或者所有其他参数都有默认参数,那么它的构造函数声明是错误的.从不实例化成员函数模板以生成此类构造函数签名.

正如评论中所解释的那样,这种禁止的原因是无限递归 - "制作副本,你必须制作副本"没有多大意义.