我在计算机科学课上的一个期中得到了这个问题,并且我试图找到正确的答案,但我一直在寻找一段时间并且没有找到最终确定答案的任何内容。这些是老师给出的选择:
A)==
B).
C)=
D)上面的b和c
E)上面的a,b和c
我标记(错误)的答案是B,我知道正确答案必须包含B,因为此运算符始终与没有任何重载的类一起使用。但是,其他选项之一也必须正确,但我不知道它是否只有一个或两个。我知道=
会给出一个浅表副本,所以我假设它包含在答案中。但==
是否会做任何事情,如果没有超载?
总而言之,我猜测正确的答案是D,但我希望有人支持这个说法,并希望能指出我在线的一些文档的方向,因为我似乎无法找到它
答案 0 :(得分:0)
正确的答案是D(如果你愿意,还有B和C.)必须重载operator==
才能与用户定义的类一起使用。
想象一下代码:
class A {
void foo() {...}
};
A a;
a.foo(); // you have seen this, alright
A b;
a = b; // this does a shallow copy or uses your assignment constructor
A c = b // this does a shallow copy or uses your copy constructor
bool issame = (a == b); // gives an compiler ERROR if operator== is not overloaded for A
答案 1 :(得分:-1)
正确的答案是B。
==
需要由用户定义。
=
是(复制/移动)构造函数或赋值运算符,具体取决于上下文。复制/移动构造函数is usually generated by the compiler if not defined, but there are specific circumstances in which it is not。在任何情况下,它都不是“内置”的任何含义。在某种意义上,所有这些都可以被“抑制”。