下面哪些c++内置操作是为类实例定义的?

Which of the following C++ built-in operations are defined for class instances?

本文关键字:实例 定义 操作 c++ 内置      更新时间:2023-10-16

我在计算机科学课的期中考试中把这个问题答错了,我试图找到正确的答案,但我已经找了一段时间,没有找到任何确凿的答案。以下是老师给出的选项:

A) ==

B) .

C) =

D)以上b、c

E) a、b、c以上

我标记(错误)的答案是B,我知道正确的答案必须包括B,因为这个操作符总是与类一起使用,没有任何重载。然而,其他选项中的一个也必须是正确的,但我不知道是只有一个还是两个。我知道=会给出一个浅拷贝,所以我假设它包含在答案中。但==做什么,如果没有超载?

总而言之,我猜正确的答案是D,但我希望有人支持这一说法,并希望能给我指出一些关于这方面的在线文档的方向,因为我似乎找不到

正确答案是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

正确答案是b。

==需要自定义

=是(复制/移动)构造函数或赋值操作符,具体取决于上下文。如果没有定义,复制/移动构造函数通常由编译器生成,但在某些特定情况下没有定义。在任何情况下,它都不是"内置"的。在某种意义上,它们都可以被"抑制"。

相关文章: