为什么我不能打电话给定义为朋友的接线员?

时间:2020-03-04 20:19:51

标签: c++ operator-overloading friend

我试图为某种类型定义一元operator+。我希望此运算符只能在类的范围内使用,但是即使不可能,我仍然对此感到困惑:

struct X {};

struct Foo {
    friend const char* operator+(X x) { return "hi"; }

    void foo() {
        +X{};   // error: invalid argument type 'X' to unary expression
    }
};
int main() {
    +X{};   // error: invalid argument type 'X' to unary expression
    return 0;
}

如果运算符在类内部是不可调用的,并且在类外部是不可调用的,那么它可调用吗?去哪了?

(请注意,+(X{})的行为方式相同,如果将operator+移到struct Foo之外,则两个调用均有效。)

0 个答案:

没有答案