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

C++ 在此代码中调用了哪个构造函数或赋值运算符?,c++,copy-constructor,assignment-operator,C++,Copy Constructor,Assignment Operator,输出是 调用了构造函数 20 当我添加复制构造函数时,它给出错误“从“Foo”类型的右值初始化“Foo&”类型的非常量引用无效”” #包括 使用名称空间std; 福班 { INTA; 公众: 傅(内部助理) { 这->a=a; cout您发布的代码中没有赋值。这是: Foo F1 = static_cast<Foo>(20); 它阻止它绑定到临时值。它应该是: Foo( const Foo & f ); 是的,我的复制构造函数是Foo(Foo&f);谢谢,Neil

输出是

调用了构造函数
20

当我添加复制构造函数时,它给出错误“从“Foo”类型的右值初始化“Foo&”类型的非常量引用无效”

#包括
使用名称空间std;
福班
{
INTA;
公众:
傅(内部助理)
{
这->a=a;

cout您发布的代码中没有赋值。这是:

  Foo F1 = static_cast<Foo>(20);
它阻止它绑定到临时值。它应该是:

  Foo( const Foo & f );

是的,我的复制构造函数是Foo(Foo&f);谢谢,Neil。但是添加常量是如何解决r值问题的呢?标准规定只有常量引用可以绑定到右值。这在这种情况下特别有意义,因为复制构造函数通常不能更改被复制的对象。
  Foo( Foo & f );
  Foo( const Foo & f );