【发布时间】:2020-05-10 12:04:32
【问题描述】:
假设我们有这个类定义:
class A{
public:
int a;
A(int i): a(i){}
A operator-() const { return A(- a); } # first operator- function
};
A operator-(const A& o) { return A(- o.a); } # second operator- function
现在,在main 函数中,如果我写:
A a1(10);
A a2 = -a1; # Here the first operator- function (method) is called!
但是,如果我删除类中 operator- 的第一个定义,则会调用第二个函数。 我想知道为什么编译器在提供两者时更喜欢第一个定义。
我也想知道为什么编译器接受调用第一个函数(方法)。因为我认为该方法是 a1- 而不是 -a1 的同义词:应用该方法的对象位于运算符之前(左侧)。
【问题讨论】:
-
您可能想了解更多关于unqualified lookup 的信息,尤其是它如何与overloaded operators 和overload resolution 一起工作。
标签: c++ operator-overloading operator-keyword