return 0; 当我编译上面的例子时,我得到了error: use of deleted function 'Foo& Foo::operator=(Foo&&)'
如果只提供副本赋值,则所有参数类别都会选择它(只要它以值作为参数或引用const,因为rvalue可以绑定到const引用),这使得在移动不可用时,复制分配成为移动分配的后盾。当const引用可以绑定到rvalue和const Foo & f = getFoo();工作时,编译器为什么不回退到复制
根据C++对的参考
T有一个非类类型的非静态数据成员(或其数组),即const .我希望创建一种情况,在这种情况下,我有一个const类类型的数据成员和一个未定义为已删除的默认副本赋值操作符。在这样做的过程中,我发现了clang和gcc之间的差异。我正在使用gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)和clang version 6.0.0-1ubuntu2。
我在这里尝试做的是重载%运算符,以便它将分子乘以给定的数字。我在程序中的所有其他重载操作符都可以完美地工作,但这个操作符给我带来了问题。为了隔离这个问题,我创建了一个单独的较小的程序,其中只有这个重载操作符。decided to omit them
numerator = numerator * x;当我像这样在main.cpp文件中使用它们时note: no known conversion for argument 1