在此代码中调用哪个构造函数或赋值运算符?

时间:2017-03-19 15:20:05

标签: c++ copy-constructor assignment-operator

输出

构造函数
20

当我添加一个拷贝构造函数时,它会给出错误" 从'Foo'类型的右值&#强制初始化'Foo&'类型的非const引用34;

  #include <iostream>
  using namespace std;

  class Foo
  {

  int a;
  public:
    Foo(int a)
    {
        this->a =a;
        cout<<"Constructor called\n";
    }
    void operator=(Foo f)
    {
        this->a = a;
        cout<< "Assignment operator called";
    }
    void show()
    {
        cout<<this->a<<endl;
    }

  };


  int main() 
  {
    // your code goes here
    Foo F1 = static_cast<Foo>(20);
    F1.show();
    return 0;
  }

1 个答案:

答案 0 :(得分:1)

您发布的代码中没有任何分配。这样:

  Foo F1 = static_cast<Foo>(20);

是复制构造的替代语法,是初始化,而不是赋值。

复制构造函数的问题可能是由于您将其定义为

  Foo( Foo & f );

阻止它绑定到临时值。它应该是:

  Foo( const Foo & f );