class Bar {operator Foo(); }

时间:2011-12-30 20:10:22

标签: c++ constructor operator-overloading

这种运算符重载的含义是什么意思?

class Foo {
    Foo(int a) { ... }
};

class Bar {
    operator Foo() { return Foo(25); }
};

2 个答案:

答案 0 :(得分:10)

这是用户定义的转换函数,它隐式地将Bar的实例转换为Foo

Bar bar;

Foo foo = bar;  // bar implicitly converts into Foo.

就好像你写的那样:

Foo foo = Foo(25);

如果你有这样的转换功能,那么你可以这样称呼:

void f(Foo foo); //a function which accepts Foo

f(bar); // bar implicitly converts into Foo.

因此,这种隐式转换有时可能不合适,因为它可能会导致问题,从而产生意外结果。为避免这种情况,您可以将转换函数显式设为(仅限C ++ 11中):

//valid in C++11 only

class Bar {
  explicit  operator Foo() { return Foo(25); }
};

现在这两个都会出错:

Foo foo = bar; //error
f(bar); //error

但是,允许以下内容:

Foo foo = static_cast<Foo>(bar); //Ok
f(static_cast<Foo>(bar)); //Ok

答案 1 :(得分:0)

这是cast operator的重载。我能找到的最佳文档是MSDN

基本上,如果您有Bar,则可以将其转换为使用特定值构建的Foo

Bar b;
Foo f = b;