Tas*_*man 0 c++ constructor initialization copy-constructor
为什么这个论点不是通过价值传递的?
当我尝试它时,我的编译器只给了我一条消息,说"你可能意味着" Foo(const Foo&).
这是什么原因?
因为传递值首先需要复制构造函数.
因此,为了避免无限递归,如果我们确实希望通过值1传递,则必须在传递值版本之前定义传递引用复制构造函数.由于通过值复制构造函数没有多大意义,标准禁止它.
您根本不允许按值传递它 - 标准的§12.8[class.copy]/p6明确禁止它:
如果一个类的构造函数
X的第一个参数是类型(可选择cv-qualified)X并且没有其他参数,或者所有其他参数都有默认参数,那么它的构造函数声明是错误的.从不实例化成员函数模板以生成此类构造函数签名.
正如评论中所解释的那样,这种禁止的原因是无限递归 - "制作副本,你必须制作副本"没有多大意义.