使用多个参数复制构造函数 我正在学习C++,从>C++中读取复制构造函数:完整的引用< /代码>。书上说

使用多个参数复制构造函数 我正在学习C++,从>C++中读取复制构造函数:完整的引用< /代码>。书上说,c++,copy-constructor,C++,Copy Constructor,复制构造函数可以有额外的参数,只要它们有为它们定义的默认参数。但是,在所有情况下,第一个参数必须是对进行初始化的对象的引用 但我很困惑,我们将如何传递这些额外的参数?我相信应该有一些书中没有给出的方法,而我无法理解。有人能帮我吗 编辑: 也可以在所有三种情况下传递这些额外参数,即 当一个对象显式初始化另一个对象时,如在声明中 将对象的副本传递给函数时 生成临时对象时(通常作为返回值) 以下是一个简单的例子: class A { //... public: A (const A&

复制构造函数可以有额外的参数,只要它们有为它们定义的默认参数。但是,在所有情况下,第一个参数必须是对进行初始化的对象的引用

但我很困惑,我们将如何传递这些额外的参数?我相信应该有一些书中没有给出的方法,而我无法理解。有人能帮我吗

编辑: 也可以在所有三种情况下传递这些额外参数,即

  • 当一个对象显式初始化另一个对象时,如在声明中
  • 将对象的副本传递给函数时
  • 生成临时对象时(通常作为返回值)

    • 以下是一个简单的例子:

      class A {
          //...
      public:
          A (const A&, bool deep = false) {
              if (!deep) { /* make a shallow copy */ }
              else { /* make a deep copy */ }
          }
      };
      
      void foo (A x) { /*...*/ }
      A bar () { /*...*/ return A(); }
      A a_var;
      
      在本例中,参数默认为false,这意味着默认的复制构造函数将是浅层的

      A b(a_var);       // b gets a shallow copy of a
      foo(b);           // foo() receives a shallow copy
      
      但是,可以通过在第二个参数中传递true来实现深度复制

      A b(a_var, true); // b gets a deep copy of a
      foo(A(b, true));  // foo receives a shallow copy of a deep copy
      
      类似地,对于返回
      a
      的函数,返回的副本将是浅的,因为它使用默认值,但接收方在接收时可以使其变深

      A b(bar());       // shallow
      A b(bar(), true); // deep
      

      请记住,当您定义复制构造函数时,这可能意味着您将需要定义析构函数并重载赋值运算符(三法则)。

      这样想:只有构造函数的概念。当编译器决定需要复制时,它会寻找一个构造函数,该构造函数可以通过传入类型为
      T
      的单个对象来调用。由于这种特殊的用例,我们通常将选择的构造函数称为“复制”构造函数。

      另外两种情况如何,即通过值将对象传递给函数并返回对象。。。我也更新了同样的问题。赫伯特·席尔德的书在。这是因为每页都有大量的错误,它声称错误的做法是错误的。应该能帮你选一个好的。