为什么重载运算符可以返回其返回类型以外的其他内容?
Why can an overloaded operator return something else than its return-type?
我正在为即将到来的考试进行练习,我在一次练习中遇到了一段奇怪的代码。对于上下文,这是您必须确定代码是否会运行、它有什么问题等的练习之一。我觉得奇怪的代码如下:
class A {
int x;
public:
A(int i = 0) { x = i;}
A operator+(const A& a) { return a.x + x;}
...\ rest of the code is not relevant
};
当然,我假设运算符会生成错误,因为它返回一个 int 值,而它的返回类型被定义为类 A。但是,在我的 IDE 中插入整个示例后,为了检查我是否正确,不仅函数声明中没有抛出错误,而且代码中的一个稍后加法操作实际上"有效"(我使用引号,因为它返回的值是垃圾,但它也没有抛出任何错误(。
为什么这不会引发任何错误?
int
可以通过构造函数隐式转换为A
A(int)
。您的operator+
实际上执行return A{a.x + x};
这不是特定于重载运算符的 - 每当在需要另一种类型的地方提供一种类型的表达式时,编译器就会寻找将前者隐式转换为后者的方法。
相关文章:
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 重载其他类的新运算符
- 为什么重载运算符可以返回其返回类型以外的其他内容?
- 为什么 ADL 的运算符函数行为与其他函数不同?
- "Do nothing"在三元运算符的其他部分?
- 如何将模运算符与其他数据类型一起使用
- 不太明白 & 运算符的地址在这个结构中做什么,以及它如何能够访问其他成员变量
- 重载流<<运算符,用于指针/共享指针和其他类型的
- 如何在其他类中重载运算符 ==
- 在传递其他参数时在 C++ 中重载运算符
- 为什么友元运算符<<在某些情况下使用,而在其他情况下不使用
- 重载+运算符问题与其他类中的友元函数混合
- 在C++中,我们如何将插入运算符和其他运算符链接在一起
- isSet() 或运算符 void*() 或显式操作程序 bool() 或其他东西
- 是否可以使用运算符new从堆以外的其他位置进行分配
- 函子 - 它们相对于未实现运算符的其他类具有什么能力 ( )
- c++运算符重载,看不到其他运算符
- 将其他运算符隐藏一段时间
- 仅当找不到其他运算符时才调用我的模板运算符<<
- 重载 [],但其结果在与其他运算符交互之前未解析 (C++)