下面哪些c++内置操作是为类实例定义的?
Which of the following C++ built-in operations are defined for class instances?
我在计算机科学课的期中考试中把这个问题答错了,我试图找到正确的答案,但我已经找了一段时间,没有找到任何确凿的答案。以下是老师给出的选项:
A) ==
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。
==
需要自定义
=
是(复制/移动)构造函数或赋值操作符,具体取决于上下文。如果没有定义,复制/移动构造函数通常由编译器生成,但在某些特定情况下没有定义。在任何情况下,它都不是"内置"的。在某种意义上,它们都可以被"抑制"。
相关文章:
- 对显式实例化的模板函数的未定义引用
- 未定义的类模板不会实例化以检查友元函数
- 将自定义 QMap 模板实例化以人类可读的形式保存在 QSettings 中
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 何时需要实例化函数模板定义?
- 使用用户定义的类型 UDT 实例化 std::atomic<>。如果 UDT 具有虚函数,则 l 墨水将失败。为什么?
- 实例化具有不完整类型的类模板格式不正确(如果该类型是在之后定义的)
- 将类成员函数的模板定义放在 CPP 文件中C++隐式实例化而不是 .H 允许吗?
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 如何使用自定义流操纵器在类实例中保存数据
- 是否是从等待返回到悬而未决的"this"实例的未定义行为?
- XCode 警告"此处需要实例化变量'Singleton:<Foo>:_instance',但没有可用的定义
- 为什么c++允许成员函数定义中实例的私有成员访问
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- C++:如何在结构中定义类实例.类具有参数化的构造函数
- 自定义链表const_iterator无法遍历列表的非const实例
- 每个类实例的自定义函数 (C++)
- 下面哪些c++内置操作是为类实例定义的?