这可能是一个微不足道的问题,但我没有找到满意的答案,不能真正弄清楚发生了什么。超载运营商=
假设你有下面的代码:
#include <iostream>
class Foo
{
public:
void operator=(int)
{
std::cout << "calling Foo::operator=(int)" << std::endl;
}
};
int main()
{
Foo a, b;
a = 10; // it works, of course, no questions here
a = b; // why does this work?
}
由于我在Foo
超载operator=
,我希望行a = b
内main()
吐编译器错误(即a.operator=(b)
不应该编译,因为有没有从b
到int
的隐式转换,后者是输入类型Foo::operator=(int)
)。为什么分配a = b
默默地工作,究竟发生了什么?编译器是否会产生一个“默认”operator=(const Foo&)
,即使在我重载它的情况下?
谢谢,看来你知道标准:)你有一秒钟。数? – vsoftco 2014-10-31 02:05:25
如果存在显式声明的移动构造函数或移动赋值运算符,则隐式声明的复制赋值运算符也将被定义为删除。 – Brian 2014-10-31 02:05:31
@布莱恩,谢谢,我知道,对于赋值运算符只是好奇心。似乎有点奇怪,不能为重载操作符指定“显式”。这可能很有用,特别是在处理代理对象时。 – vsoftco 2014-10-31 02:08:51