首页 > 解决方案 > 为什么我不能呼叫定义为朋友的接线员?

问题描述

我试图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,则两个调用都有效。)

标签: c++operator-overloadingfriend

解决方案


推荐阅读